【问题标题】:declare property as object?将属性声明为对象?
【发布时间】:2011-01-13 06:21:22
【问题描述】:

如何将类属性声明为对象?

我试过了:

 public $objectname = new $Object();

但它没有用。另外,你为什么要那样做?

仅实例化该对象并仅使用其成员不是更好吗?

【问题讨论】:

    标签: php oop class


    【解决方案1】:

    PHP 不支持类成员的显式类型。所以你不能说:

    public Object $objectname;
    

    如果类 Object 存在,并且您想要它的实例,请尝试:

     public $objectname = new Object();
    

    【讨论】:

    • 这会产生致命错误,“常量表达式包含无效操作”
    【解决方案2】:

    来自PHP manual on class properties(强调我的):

    类成员变量称为“属性”。您可能还会看到使用“属性”或“字段”等其他术语来提及它们,但出于本参考的目的,我们将使用“属性”。它们是通过使用关键字 public、protected 或 private 之一来定义的,然后是一个普通的变量声明。这个声明可能包括一个初始化,但是这个初始化必须是一个常量值——也就是说,它必须能够在编译时被评估并且不能依赖于运行时信息才能被评估。

    要么在构造函数中创建它(composition

    class Foo
    {
        protected $bar;
        public function __construct()
        {
            $this->bar = new Bar;   
        }
    }
    

    inject它在构造函数中(aggregation

    class Foo
    {
        protected $bar;
        public function __construct(Bar $bar)
        {
            $this->bar = $bar;   
        }
    }
    

    或者使用setter注入。

    class Foo
    {
        protected $bar;
        public function setBar(Bar $bar)
        {
            $this->bar = $bar
        }
    }
    

    你想favor aggregation over composition

    【讨论】:

    【解决方案3】:

    如果你只是想实例化一个泛型类,你可以这样做:

    $objectname = new stdClass;
    

    我不相信您可以在属性声明中执行此操作,因此您只需声明 $objectname 并在构造函数中将其设置为新的 stdClass。

    【讨论】:

      【解决方案4】:

      您可以在构造器区域创建一个新类,然后将其设置为新对象。

      class CampaignGroupsProperty
      {
          public $id;
          public $name;
      }
      
      
      
      class GetCampaignGroupsResponse
      {
          public $result;
          public $resultCode;
      
          public $campaignGroups;
      
          public function __construct()
          {
              $this->campaignGroups = new CampaignGroupsProperty();
          }
      }
      

      那你可以这样称呼它

      $response = new GetCampaignGroupsResponse();
      $response->campaignGroups->id = 'whatever';
      $response->result=true;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-07
        相关资源
        最近更新 更多