是否允許將實例變量隱式地分配給實例? 也就是說,在一個沒有實例變量的類的方法中,我可以這樣做嗎?是否允許將實例變量隱式分配給實例?
$this->foo = "foo";
$this->bar = "bar";
和以後只是再次調用那些? PHP會在這種情況下創建實例變量嗎?
是否允許將實例變量隱式地分配給實例? 也就是說,在一個沒有實例變量的類的方法中,我可以這樣做嗎?是否允許將實例變量隱式分配給實例?
$this->foo = "foo";
$this->bar = "bar";
和以後只是再次調用那些? PHP會在這種情況下創建實例變量嗎?
是的。 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
是的,它只會在對象上創建新的屬性。
這是不好的做法雖然;它遺漏了類代碼中的文檔並公開了新的屬性。 – 2009-12-25 21:29:13
但是在編寫模板引擎時很有用:-) – openfrog 2009-12-25 21:47:29
不需要在頂層聲明,php不是那麼嚴格,並且不是必需的。 – dusoft 2009-12-25 21:47:18