Intereting Posts
Соединение с WebSocket с «ws: //mydomain.com: 8084 /? Peer_id = 123» не выполнено: ошибка при установлении соединения: net :: ERR_CONNECTION_TIMED_OUT Обновление базы данных MySql с помощью PHP с помощью функции javascript onClick Извлечение детей из XML с помощью PHP Ввод поля формы пуст, чем не обновлять Как показать не более 5 номеров в разбивке на страницы? Выложите видео перед отправкой формы Добавить разбивку на страницы в wordpress admin в моем собственном настроенном плагине день недели за днем ​​(понедельник = 1, вторник = 2) 403 Запрещенный доступ к контроллеру CodeIgniter из запроса ajax Удалите запись и изменение файлов в php.ini что является основной причиной «ошибки выхода из сегментации pid 10708« Ошибка сегментации (11) »? mysql_real_escape_string работает в localhost, но не на веб-сервере Запросите отношение ManyToMany и покажите хороший результат в Symfony с Doctrine автоматически обновлять строку после определенного времени массив объединяет три или более массива с php

предотвратить использование объекта PHP из автоматического литья

class Foo { public $var ; function __construct($value) { $this->var = $value ; } } $myFoo = new Foo('hello'); echo $myFoo->var . '<br>' ; // output : hello // Question : how can I prevent another programer from accidentaly doing the following $myFoo = 4 ; echo $myFoo ; // output : 4 

мой вопрос в комментарии // Вопрос: …

Я хотел бы, чтобы мои коллеги могли присваивать значения $ myFoo только $ myFoo-> var (или любые общедоступные мутаторы доступны в классе Foo)

Спасибо

EDIT: при всем уважении к пользователям, которые утверждают, что это невозможно, SPL_Types Расширение PECL удалось достичь (в определенной степени), например, http://php.net/manual/en/class.splint.php или http : //blog.felixdv.com/2008/01/09/spl_types-in-php-and-strong-typing/

Solutions Collecting From Web of "предотвратить использование объекта PHP из автоматического литья"

Вы не можете сделать это на любом слабо типизированном языке. Если у вас есть функции, которые принимают эту переменную в качестве аргумента, вы можете использовать намеки типа в PHP, но в противном случае вы не сможете помешать людям переустанавливать свои переменные.

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

Единственный способ, который может произойти, – это то, что программист явно использует константы вместо переменных (например, используя такие вещи, как final в Java, или val в Scala и т. Д.), Но в любом случае вы не можете контролировать его на любом языке.

Вы не можете запретить изменение типа внутри класса, но если вы сделаете его защищенным или приватным, а затем добавите метод setVariable () (где Variable – это имя переменной), вы можете управлять вводом. Что-то вроде:

 class myClass { protected $integer = 0; public function setInteger($new_value) { if (!is_int($new_value)) { throw new RuntimeException('Cannot assign non-integer value to myClass::$integer'); } $this->integer = $new_value; } public function getInteger() { return $this->integer; } } // Now, outside of the class, the $integer property can only be changed using setInteger() $class = new myClass; $class->setInteger('dog'); // Uncaught Runtime exception ... $class->setInteger(5); echo $class->getInteger(); // 5 

Альтернативная версия этой функции будет принимать строковые номера и преобразовывать их в целые числа:

  public function setInteger($new_value) { if (!is_numeric($new_value)) { throw new RuntimeException('Cannot assign non-integer value to myClass::$integer'); } $this->integer = (int) $new_value; } $class->setInteger('5'); // 5