Черты;подсказки родителя и себя в PHP 5.4 - PullRequest
4 голосов
/ 28 июля 2011

Хотя этот вопрос несколько не зависит от языка ( не зависит от языков ООП, поддерживающих черты ), я возился с ночными сборками PHP 5.4a и столкнулся со странным сценарием.Кажется, я больше не могу запустить установку, но это уже другая история.

Учитывая следующий фрагмент:

trait MyTrait
{

    public function myMethod(self $object)
    {
        var_dump($object);
    }

}

class MyClass
{

    use MyTrait;

}

$myObject = new MyClass();
$myObject->myMethod('foobar'); // <-- here

Что должно произойти?Я надеюсь на ошибку, указывающую, что $object должен быть экземпляром MyClass.

Когда методы черты копируются в класс use, копируются ли они дословно, чтобы разрешить классссылки на наследование, подобные этим?Это предполагаемая функциональность Черты?( Я не работал с другим языком, который их поддерживал )

Ответы [ 2 ]

5 голосов
/ 09 августа 2011

Ну, я подтвердил, что на самом деле, как я и ожидал:

class MyClass
{

    use MyTrait;

}

$myObject = new MyClass();

$myObject->myMethod($myObject); // ok

$myObject->myMethod('foobar'); // Catchable fatal error, argument must be instance etc

Итак, хорошие новости для всех.

4 голосов
/ 31 августа 2011

Пожалуйста, смотрите RFC для более подробной информации: https://wiki.php.net/rfc/horizontalreuse

Итак, да, действительно, предполагаемое поведение состоит в том, что метод признака ведет себя точно так, как он был бы определен в классе, который его использует. Таким образом, ссылки на магическую константу __CLASS__ преобразуются в фактическое имя класса. Если вам когда-нибудь понадобится узнать название черты, вы можете использовать __TRAIT__.

Цель состоит в том, чтобы сделать небольшое связанное поведение многократно используемым, и оно происходит из работы в мире Smalltalk, посвященной Себе, а затем непосредственно из Smalltalk. Другими языками, имеющими аналогичные конструкции, являются Perl6 и Scala. Тем не менее, они имеют свою собственную интерпретацию концепции с обычно различными свойствами и замыслами дизайна.

...