Вопросы по ОО в PHP продолжаются - PullRequest
0 голосов
/ 12 сентября 2009

Вчера у меня было несколько вопросов об ОО и классах в PHP здесь , но у меня есть пара новых вопросов.

1a)
В приведенном ниже фрагменте примера вы увидите 3 переменные, установленные в верхней части класса, а затем используемые в методе класса. Обратите внимание, что объявленная в начале переменная 3 не установлена ​​ни в какое значение, поэтому требуется ли задавать / перечислять все переменные, которые класс будет использовать вверху, как это?

1b) ИЛИ Они просто вызваны сверху, чтобы установить их как защищенные / частные / публичные?

1c) Всегда ли нужно задавать такую ​​переменную, скажем, все переменные являются общедоступными, нужно ли вам их устанавливать в начале?

<?PHP
class widget{
    private $name;
    public $price;
    private $id;

    public function __construct($name, $price){
        $this->name = $name;
        $this->price = floatval($price);
        $this->id = uniqid();
    }
}
?>

Ответы [ 2 ]

2 голосов
/ 12 сентября 2009

Переменные, объявленные в объявлении класса, но не в методе, являются «переменными-членами» этого класса - они относятся только к классу, но доступны для всех методов этого объекта, и будет создан новый набор каждого из них. для каждого экземпляра объекта.

$a = new widget("first", 0.1);
$b = new widget("second", 0.2);

echo $a->price; // will echo 0.1
echo $b->price; // will echo 0.2
echo $price; // will not echo anything unless you set $name to something elsewhere

echo $name; // will not echo anything unless you set $name to something elsewhere
echo $a->name; // will give you an error since 'name' is private to the class
1 голос
/ 12 сентября 2009

Если вы хотите установить область действия переменной, вам нужно объявить ее в объявлении класса, как вы это делали выше. Если вы просто хотите, чтобы переменная имела общедоступную область видимости, вы можете установить ее на лету в методе, просто используя:

$this->variable_name = "value";

Переменная, объявленная таким образом, будет доступна в любом методе класса, а также в любом из методов любых подклассов (классов, расширяющих этот класс).

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