2009-12-25 138 views
2

是否允許將實例變量隱式地分配給實例? 也就是說,在一個沒有實例變量的類的方法中,我可以這樣做嗎?是否允許將實例變量隱式分配給實例?

$this->foo = "foo"; 
$this->bar = "bar"; 

和以後只是再次調用那些? PHP會在這種情況下創建實例變量嗎?

回答

1

是的。 PHP將簡單地創建任何被引用但尚未聲明的成員變量。我只是用下面的代碼進行了測試:

<?php 
class Test { 
    public function __construct() { 
    } 

    public function setMembers() { 
     $this->foo = "fooValue"; 
     $this->bar = "barValue"; 
    } 

    public function echoMembers() { 
     echo $this->foo . "\n"; 
     echo $this->bar . "\n"; 
    } 
} 

$test = new Test(); 
$test->setMembers(); 
$test->echoMembers(); 
?> 

執行時,該輸出:

fooValue 
barValue 

這足以證明這工作。我仍然建議在類的頂部聲明所有類成員變量。這就是維護你的代碼的OO程序員所期望看到的。

FYI:我跑我的測試用PHP以下版本:

$ php -version 
PHP 5.2.8 (cli) (built: Feb 5 2009 21:21:13) 
Copyright (c) 1997-2008 The PHP Group 
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies 
+0

不需要在頂層聲明,php不是那麼嚴格,並且不是必需的。 – dusoft 2009-12-25 21:47:18

1

是的,它只會在對象上創建新的屬性。

+3

這是不好的做法雖然;它遺漏了類代碼中的文檔並公開了新的屬性。 – 2009-12-25 21:29:13

+1

但是在編寫模板引擎時很有用:-) – openfrog 2009-12-25 21:47:29