Сводка
Пример кода:
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)
.
Фон
Мне нужно было проверить назначенное $value
, поэтому мне просто нужен установщик-получатель, подобный этому:
getName();
setName($value);
И НЕ обязательно перегрузка магического метода установщика-получателя, например:
__get($value);
__set($value, $name);
Тем не менее, мне просто нужен установщик геттера.Но это НЕ , что я хочу.Это просто не похоже на объектно-ориентированное, потому что люди из статического типизированного языка, такого как C ++ или C #, могут чувствовать то же самое, что и я.
Есть ли способ получить и установить частное свойство в PHP, как в C #, без использования перегрузки магического метода установщика-получателя?
Обновление
Почему не магический метод?
Ходят слухи, что магический метод в 10 раз медленнее, чем явный метод установки геттера,Я еще не проверял это, но это хорошая вещь, чтобы иметь в виду. (Выяснилось, что это не так медленно, просто в 2 раза медленнее, см. Результат теста ниже)
Мне нужно собрать все одним огромным методом, если я использую магиюметод, а затем разделить их на разные функции для каждого свойства, как в явном установщике геттера. (На это требование мог бы ответить ircmaxell )
Сравнительный анализ производительности
Мне любопытно, что производительность снизитсямежду магическим методом и явным установщиком получения, поэтому я создал свой собственный тест для обоих методов, и, надеюсь, он может быть полезен всем, кто прочитает это.
С магическим методом и method_exist:
(нажмите здесь , чтобы увидеть код)
- Геттер стоит 0,0004730224609375 секунды.
- Сеттер стоит 0,00014305114746094 секунды.
С явным установщиком получения:
(нажмите здесь , чтобы увидеть код)
- Getter стоит 0,00020718574523926 секунды.
- Setter стоит 7,9870223999023E-5 секунд (это 0,00007xxx).
При этом и метод установки, и метод получения с магическим методом и методомсуществует только в 2 раза дороже, чем явный метод получения.Я думаю, что все еще приемлемо использовать это для системы малого и среднего масштаба.