Как использовать приватное свойство контроллера в качестве статического свойства? - PullRequest
1 голос
/ 14 мая 2019

Итак, вопрос в значительной степени объясняет, чего я хочу.Вот минимальный код того, что я делаю.

class AuthorizeController extends Controller
{
    private $aNetEnvironment;

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->aNetEnvironment = env('ANetEnvironment');
    }

    public function setEnvironment()
    {
        $controller = new AnetController\GetCustomerProfileController($request);
        // $this->aNetEnvironment = SANDBOX
        $response = $controller->executeWithApiResponse( 
            \net\authorize\api\constants\ANetEnvironment::$this->aNetEnvironment 
        ); 
    }
}

Поиск в стеке потока Я получил два варианта, попробовал оба без удачи.

Попытка, {$this->aNetEnvironment} дает

синтаксическая ошибка, неожиданный ')', ожидающий '('

Trying, $$this->aNetEnvironment дает

Объект класса App \ Http \ Controllers \AuthorizeController не может быть преобразован в строку

Редактировать:

Попытка, ${$this->aNetEnvironment} дает

Доступ к необъявленному статическому свойству: net \ authorize \ api \ constants \ ANetEnvironment :: $ SANDBOX

Есть ли другой вариант?

Ответы [ 2 ]

2 голосов
/ 14 мая 2019

Вы можете использовать PHP * constant() помощник . Из документов:

Подпись:

constant ( string $name ) : mixed

Возвращает значение константы, указанной именем.

constant() полезно, если вам нужно получить значение постоянный, но не знаю его названия. То есть он хранится в переменной или возвращается функцией.

Эта функция также работает с константами классов .

Итак, в вашем случае:

$response = $controller->executeWithApiResponse( 
    constant('\net\authorize\api\constants\ANetEnvironment::' . $this->aNetEnvironment) 
); 
0 голосов
/ 14 мая 2019

Чтобы использовать свойства класса как переменные таким образом, вам нужно начать с $ и обернуть свойство в {} например ${$this->property}, чтобы вы могли использовать следующее вваш контроллер:

\net\authorize\api\constants\ANetEnvironment::${$this->aNetEnvironment}
...