如何将控制器的私有属性用作静态属性?

时间:2019-05-14 16:43:35

标签: php laravel oop laravel-5 authorize.net

所以,这个问题几乎可以解释我想要什么。这是我正在做的最少代码。

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 
        ); 
    }
}

搜索stackoverflow我有两个选择,都没有运气尝试过。

尝试,{$this->aNetEnvironment}给予

  

语法错误,意外的')',预期为'('

尝试,$$this->aNetEnvironment给予

  

App \ Http \ Controllers \ AuthorizeController类的对象不能为   转换为字符串

编辑:

尝试,${$this->aNetEnvironment}给予

  

访问未声明的静态属性:   net \ authorize \ api \ constants \ ANetEnvironment :: $ SANDBOX

还有其他选择吗?

2 个答案:

答案 0 :(得分:2)

您可以使用PHP的constant() helper。从文档中:

  

签名:

constant ( string $name ) : mixed
     

返回由名称表示的常数的值。

     

constant()在需要检索a的值时很有用   常量,但不知道其名称。即它存储在变量或   由函数返回。

     

此函数也可用于类常量

所以在您的情况下:

$response = $controller->executeWithApiResponse( 
    constant('\net\authorize\api\constants\ANetEnvironment::' . $this->aNetEnvironment) 
); 

答案 1 :(得分:0)

要以这种方式将类属性用作variable variables,您需要从$开始并将该属性包装在{}中,例如${$this->property},因此您应该可以在控制器中使用以下内容:

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