В вашем примере второй метод очень рискован. Если вы указываете имя переменной в качестве аргумента, вы фактически даете коду доступ для установки всех закрытых переменных вне класса. Какой смысл иметь приватные переменные, если вы позволяете им свободно устанавливаться таким образом?
Кроме того, смысл инкапсуляции в ООП заключается в том, что внутренняя работа класса непрозрачна для кода вне класса. Ваш второй метод нарушает эту инкапсуляцию и, следовательно, часть точки ООП, поскольку код вне класса должен знать о внутренней работе класса, например, об имени переменных. Что произойдет, если вы позже решите изменить имена переменных? Весь код ломается. Если бы к ним обращались через сеттеры/геттеры, старые функции можно было бы изменить, чтобы отразить изменения внутри класса, но код вне класса было бы трудно изменить. Кроме того, второй метод усложняет проверку значений.
Следует использовать первый способ, особенно если для работы необходима установка переменных класса. Однако, если вы чувствуете, что некоторые значения по умолчанию могут быть разрешены для атрибутов, вы можете просто воспользоваться значениями аргументов PHP по умолчанию, такими как:
class Test {
private $var1;
private $var2;
public function Test($var1 = 'defaultValue', $var1 = 'defaultValue') {
$this->var1 = $var1;
$this->var2 = $var2;
}
}
$objTest = new Test();
В любом случае, если значения должны быть инициализированы кодом, то вы обязательно должны принудительно передать их в конструкторе. Если значения по умолчанию разрешены, то либо инициализируйте значения в конструкторе с отдельными сеттерами для переменных, либо просто значениями аргументов по умолчанию, как в приведенном примере. Однако не следует ожидать, что код установит критические значения с помощью сеттеров после вызова конструктора.
person
Riimu
schedule
16.03.2011
static
членом класса; у переменной класса есть только одно значение, общее для всех экземпляров этого класса. Вы показываете переменные экземпляра, которые в php называются properties< /я>. - person ToolmakerSteve   schedule 22.04.2019