Получить и установить (частное) свойство в PHP, как в C #, без использования перегрузки магического метода установки геттера

Резюме

Пример кода:

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 #, без использования перегрузки магического метода установки геттера?


Обновление

Почему не волшебный метод?

  1. В Интернете ходят слухи, что магический метод в 10 раз медленнее, чем явный метод установки геттера, я еще не тестировал его, но это хорошо, что нужно иметь в виду. (Выяснили, что это не так уж и медленно, всего в 2 раза медленнее, см. Результат теста ниже)

  2. Мне нужно собрать все в один огромный метод, если я использую магический метод, а не разбивать их на разные функции для каждого свойства, как в явном сеттере геттера. (На это требование мог ответить ircmaxell )

Бенчмаркинг накладных расходов на производительность

I ' Мне интересно узнать о накладных расходах на производительность между использованием магического метода и явного установщика геттера, поэтому я создал свой собственный тест для обоих методов и, надеюсь, он может быть полезен всем, кто это прочитает.

С помощью magic method и method_exist:

(щелкните ] здесь , чтобы увидеть код)

  • Получатель стоит 0,0004730224609375 секунды.
  • Сеттер стоит 0,00014305114746094 секунды.

С явным установщиком геттера:

(щелкните здесь , чтобы увидеть код)

  • Геттер стоит 0,00020718574523926 секунд.
  • Сеттер стоит 7,9870223999023E-5 секунд (это 0,00007xxx).

Тем не менее, как сеттер, так и геттер с волшебным методом и методом существует, стоят в 2 раза больше, чем явный сеттер геттера. Я думаю, что все еще приемлемо использовать его для малых и средних систем.

6
задан Community 23 May 2017 в 12:10
поделиться