2016-09-22 134 views
0

您好我有一个类:与受保护财产AbstractEntityType:访问PHP保护性

abstract class AbstractEntityType extends AbstractType { 
    protected static $lists = null; 

    public function __construct($lists = array()) { 
    AbstractEntityType::$lists = $lists; 
    } 

    public function configureOptions(OptionsResolver $resolver) { 
    $resolver->setRequired(array(
     'temp', 'statut' 
    )); 
    } 
} 

这里是另一个类扩展上一个:

class MyType extends AbstractEntityType { 
    .... 
} 

我使用一个工厂来创建的MyType等级:

class SimpleFormTypeFactory { 
    public function createType($entity_type, $entity_stub, $lists = null) { 
     $type = null; 

     switch($entity_type) { 
      .... 
      case SOMENUMTYP: 
      $type = new MyType($lists); 
      break; 
     } 
    } 

我在本地测试它与php 5.4和windows没有问题,但在服务器(Linux和PHP 5.3)我有这个错误:

Error: Cannot access protected property MyType::$lists 

这是怎么回事?一个PHP错误?

谢谢

回答

5

的财产受到保护,所以你永远无法做到这一点:

public function __construct($lists = array()) { 
    AbstractEntityType::$lists = $lists; 
    ^^^^^^^^^^^^^^^^^^^^^^^^^^ Not allowed for a protected property, regardless where you are 
} 

然而,当你是你的类中,你可以直接访问它:

public function __construct($lists = array()) { 
    self::$lists = $lists; 
} 
+0

你是对的一件事情:我应该用自己而不是班级的名字(虽然,就像我说的那样,它在测试环境中运行良好)。 – mlwacosmos

+0

@mlwacosmos它也不适用于您的测试环境。但我从来没有在Windows上使用过PHP或服务器,所以我不知道可能会导致什么结果。可能在错误处理,但我猜你会注意到,当它不能正常工作:-) – jeroen

+0

对不起,我犯了一个错误,问题不在建设。就像我写的那样,它起作用。我的问题在别的地方。你之前写的关于“不允许受保护的财产”的看法对我来说似乎并不合适,但我可能是错的。可以调用抽象类中的静态属性。在子类中没有定义构造函数,所以它们都是父类的。 (在Java中就是这样)。我会问我关于我的问题的另一个问题。 – mlwacosmos