Возможный дубликат:
Перегрузка оператора в PHP
Есть ли способ перегрузить оператор =?
Поэтому хочу, чтобы я был следующим:
class b{ function overloadis(){ // do somethng } } $a = new b(); $a = 'c';
В приведенном выше примере я хочу, чтобы при $ a = 'c'; , метод overloadis вызывается первым, а затем эта функция выполняет, если действие (назначить 'c' на $ a) выполняется или прервано.
Можно ли сделать это ?
Thnx заранее, Боб
Нет. PHP не поддерживает перегрузку оператора, за несколькими исключениями (как отмечает @NikiC: «PHP поддерживает перегрузку некоторых операторов, таких как [], -> и (string), а также позволяет перегружать некоторые языковые конструкции, такие как foreach») ,
Вы можете имитировать такую функцию для свойств класса, используя PHP-magic-function __set()
и установив соответствующее свойство в private / protected.
class MyClass { private $a; public function __set($classProperty, $value) { if($classProperty == 'a') { // your overloadis()-logic here, eg // if($value instanceof SomeOtherClass) // $this->$classProperty = $value; } } } $myClassInstance = new MyClass(); $myClassInstance->a = new SomeOtherClass(); $myClassInstance->a = 'c';
Посмотрите на расширение перегрузки оператора PECL .