2009-12-25 4 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

1

Да, он просто создаст новые объекты на объекте.

+3

Это не хорошая практика, хотя; он не содержит документацию из кода класса и делает новые свойства общедоступными. –

+1

Но полезно, когда вы пишете механизм шаблонов :-) – openfrog

Смежные вопросы