Пример кода:
Class People {
// private property.
private $name;
// other methods not shown for simplicity.
}
Сразу. Предположим, что $ name
является членом класса PRIVATE (или свойство, переменная, поле, назовите его как хотите) . Есть ли способ сделать это в PHP:
$someone = new People();
$someone->name = $value;
$somevar = $someone->name;
БЕЗ с использованием __ get ($ name)
и __ set ($ name, $ value)
.
Мне нужно было проверить назначенное значение $
, поэтому мне просто нужен установщик геттера, подобный этому:
getName();
setName($value);
И НЕ обязательно перегрузка магического метода установщика геттера следующим образом:
__get($value);
__set($value, $name);
Тем не менее, мне просто нужен установщик геттера. Но это НЕ то, что я хочу. Это не похоже на объектно-ориентированный подход, потому что люди со статическими типизированными языками, такими как C ++ или C #, могут чувствовать то же самое, что и я.
Есть ли способ получить и установить частное свойство в PHP, как в C #, без использования перегрузки магического метода установки геттера?
Обновление
В Интернете ходят слухи, что магический метод в 10 раз медленнее, чем явный метод установки геттера, я еще не тестировал его, но это хорошо, что нужно иметь в виду. (Выяснили, что это не так уж и медленно, всего в 2 раза медленнее, см. Результат теста ниже)
Мне нужно собрать все в один огромный метод, если я использую магический метод, а не разбивать их на разные функции для каждого свойства, как в явном сеттере геттера. (На это требование мог ответить ircmaxell )
I ' Мне интересно узнать о накладных расходах на производительность между использованием магического метода и явного установщика геттера, поэтому я создал свой собственный тест для обоих методов и, надеюсь, он может быть полезен всем, кто это прочитает.
С помощью magic method и method_exist:
(щелкните ] здесь , чтобы увидеть код)
С явным установщиком геттера:
(щелкните здесь , чтобы увидеть код)
Тем не менее, как сеттер, так и геттер с волшебным методом и методом существует, стоят в 2 раза больше, чем явный сеттер геттера. Я думаю, что все еще приемлемо использовать его для малых и средних систем.