2012-04-11 186 views
0

爲什麼我不能做這樣的事情的時候我知道,myobject財產將被已聲明如下:未定義的屬性

define('title','boats');

myobject->title;

但這個工程:

myobject->boats

這甚至好的做法呢?

回答

3

,因爲這是嘗試訪問對象的title財產不能使用

$myobject->title 

。如果此屬性不存在,則會觸發錯誤。

您可以使用

$myobject->{title} 

,但我寧願看到你使用一個變量而不是常量,例如

$title = 'boats'; 
echo $myobject->$title; 

理想情況下,你會知道你想要的屬性來訪問和使用它的名字適當

$myobject->boats 
1

爲什麼我當我知道myobject的屬性已經被聲明時,不會執行類似以下操作:

可能因爲PHP期望您使用方法名稱來調用它。有選擇,雖然:

<?php 
define('METHOD', 'bar'); 

class Foo { 
    public function bar() { 
     echo "Foo->bar() called.\n"; 
    } 
} 

$foo = new Foo; 
call_user_func(array($foo, METHOD)); 

// or 
$method = METHOD; 
$foo->$method(); 

編輯:嗯,我似乎有誤解。我的版本用於調用其名稱在常量中定義的方法,而您正在尋找調用屬性的方法。那麼,我將把它留在這裏以備將來參考。