nepster-web
@nepster-web

Как вызвать функцию из трейта в данной ситуации?

Предположим есть вот такая ситуация:

trait TraitTest
{
    public function myFunction()
    {
        return 'myFunction()';
    }

    public function getDescription()
    {
        return 'getDescription()';
    }
}


class MyClass
{
    use TraitTest;

    public function __construct()
    {

    }
}

$MyClass = new MyClass;
echo $MyClass->myFunction();


Результат данного кода будет вот такой:
myFunction()

Теперь есть необходимость переопределить функцию myFunction:
class MyClass
{
    use TraitTest;

    public function __construct()
    {

    }

    public function myFunction()
    {
        return 'myFunction2()';
    }
}


Тут все без вопросов работает. Но, что если нужно внутри переопределенной функции myFunction() вызвать функцию myFunction из трейта.

Что-то такое:
public function myFunction()
    {
        //return self::myFunction();
        //return $this->myFunction();
        return parent::myFunction();
    }


В общем походу на пхп.нет такое не упоминает и всевозможные указатели на класс выдают ошибки.
  • Вопрос задан
  • 422 просмотра
Пригласить эксперта
Ответы на вопрос 2
miraage
@miraage
Старый прогер
Use the manual, Luke.

// EDIT для тех, кто наотказ не хочет читать доки.

<?php

trait TraitTest
{
  public function myFunction()
  {
    return 'trait myFunc';
  }

  public function getDescription()
  {
    return 'trait getDesc';
  }
}


class MyClass
{
  use TraitTest {
    TraitTest::myFunction as protected traitMyFunc;
  }

  public function myFunction()
  {
    echo 'MyClass myFunc';
    echo $this->traitMyFunc();
  }
}

$MyClass = new MyClass();
echo $MyClass->myFunction();
Ответ написан
muhammad_97
@muhammad_97
PHP-разработчик
Подключаешь так:
use MyTrait {
    MyTrait::myFunction as myTraitFunction;
}

потом вызываешь:
public function myFunction()
{
    $this->myTraitFunction();
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы