【问题标题】:How to use private property of controller as static property?如何将控制器的私有属性用作静态属性?
【发布时间】:2019-05-14 16:43:35
【问题描述】:

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

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

还有其他选择吗?

【问题讨论】:

  • env('ANetEnvironment');的内容是什么?
  • @HCK 这是“沙盒”

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


【解决方案1】:

您可以使用 PHP 的constant() helper。来自文档:

签名:

constant ( string $name ) : mixed

返回由名称指示的常量的值。

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

此函数也适用于类常量

所以在你的情况下:

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

【讨论】:

    【解决方案2】:

    要以这种方式将类属性用作variable variables,您需要以$ 开头并将属性包装在{} 中,例如${$this->property} 所以你应该能够在你的控制器中使用以下内容:

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

    【讨论】:

    • 试过了。给Access to undeclared static property: net\authorize\api\constants\ANetEnvironment::$SANDBOX
    • @shazyriver 对不起,我假设您正在尝试访问静态属性而不是常量,因为问题的标题说的是静态属性。很高兴你找到了答案。
    猜你喜欢
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 2013-11-19
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多