2010-06-17 118 views
0

我已經使用了一段時間的過程並試圖更好地理解PHP中的OOP。從方塊1開始,我有一個快速問題,讓它凝膠化。許多基本示例顯示靜態值,例如$bob->name = "Robert";分配值時。但是我想通過動態值,從形式說:$name = $_POST['name'];將動態值分配給PHP中的對象屬性

class Person { 

    // define properties 
    public $name; 
    public $weight; 
    public $age; 

    public function title() { 
     echo $this->name . " has submitted a request "; 
    } 
} 

$bob = new Person; 

// want to plug the value in here 
$bob->name = $name; 
$bob->title(); 

我想我得到一些地區有點紅了,只要在類的內部變量的訪問,封裝&「規則」,可以$ name = $ _POST ['name'];居住在課堂以外的任何地方,還是我錯過了一個重要的觀點?

感謝

+0

我只使用堆棧溢出幾次,它是一個很好的資源。仍然熟悉系統,即投票,「接受答案」等,但我很欣賞在這裏獲得多個答案/反饋。當我學習程序時,我發現我可以讓事情發揮作用,但後來發現我一路上都撿到了不好的習慣......很像這個問題 - 我可以得到「結果」,但不是;我確定我正在做這件事正常。 謝謝! – 2010-06-21 13:32:22

回答

5
$bob->name = $_POST['name']; 

設置對象的($bobname屬性$_POST['name']

3

$bob->name = $_POST['name'];。 OOP中的安全實踐是使用setter/getter方法。

0

唯一的限制是您不能使用表達式來定義類成員變量的默認值。例如,這是無效的語法:

class FooBad { 
    protected $bar = $_GET['bar']; 
    protected $baz = 1 + 1; 
} 

但這是有效的:

class FooGood { 
    protected $bar = ''; 
    protected $baz = 1; 
    protected $bat = array(
     1, 
     2, 
    ); 
} 
0

你寫$name = $_POST['name'];,那麼你該值分配給一個實例公共變量(鮑勃的名字,這是類Person的實例),使用正確的語法。在課堂之外,$ name並不是課程中的「名字」,但是您再次編寫了正確的代碼,所以我沒有看到您認爲自己錯過了什麼。也許,這$name = $_POST['name'];必須某處出現類及其方法,而事實上,你也可以寫

$bob->name = $_POST['name']; 
當然

。如果在類方法中寫入$name = $_POST['name'],那麼您將分配給本地變量:如您所知(可在代碼中看到),您可以使用$this->name訪問該實例的名稱。下面的代碼有希望澄清一些東西

$name = "hello\n"; 

class Person 
{ 
    public $name; 
    public function title() 
    { 
    echo $this->name; 
    } 
    public function setit() 
    { 
    echo $name; // raises a Notice: undefined variable 
    global $name; // now $name refers to global $name 
    $name = "I am lost\n"; 
    } 
    public function doit($n) 
    { 
    $this->name = $n; 
    } 
} 

$bob = new Person; 
$bob->title();  // _nothing_ 
$bob->name = $name; 
$bob->title();  // hello 
$bob->setit();  // Notice: --- 
echo $name;   // I am lost 
$bob->title();  // hello 
$bob->doit("test\n"); 
$bob->title();  // test