Разрешено ли неявно назначать переменные экземпляра экземпляру? - PullRequest
2 голосов
/ 26 декабря 2009

Разрешено ли неявно присваивать переменные экземпляра экземпляру? То есть внутри метода класса, который не имеет переменных экземпляра, я могу просто сделать это?

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

, а потом просто позвонить снова? Будет ли PHP просто создавать переменные экземпляра в этом случае?

Ответы [ 2 ]

1 голос
/ 26 декабря 2009

Да. 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-программисты, обслуживающие ваш код.

К вашему сведению: я провел тест со следующей версией 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
1 голос
/ 26 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...