Я пытаюсь переопределить поведение магического метода __set
в черту. Проблема появляется, когда я также хочу получить доступ от черты к родительскому классу обычай __set
функция.
trait TestingTrait {public function __set($key, $value)
{
// Some stuff...
parent::__set($key, $value);
// self::__set($key, $value);
}
}
class TestingClass {
use TestingTrait;
}
$var = new TestingClass();
$var->value = 'some value';
Все работает отлично, пока мне не нужно использовать основной класс __set
метод, как он делает некоторые другие вещи с наборами переменных.
Я пробовал с self
но это входит в бесконечный цикл. Есть ли способ получить доступ к основному классу?
Вы должны использовать $this->
как это:
<?php
trait TestingTrait {public function __set($key, $value)
{
// Some stuff...
$this->$key = 'proof that it is going through here: ' . $value;
}
}
class TestingClass {
use TestingTrait;
}
$var = new TestingClass();
$var->value = 'some value';
echo $var->value;
proof that it is going through here: some value
Я не знал, что черты поведения таковы, как если бы это была часть кода, буквально скопированная / вставленная в класс.
Невозможно получить доступ к главному классу через родительский класс, поскольку у него фактически нет родительского класса, выходящего из.