在PHP中访问类中对象的成员

时间:2009-04-22 15:25:06

标签: php class object

我的代码:

class Address{
   public var $Street;
}

class Employee{
    public var $ID:
    public var $Name:
    public var $Address;
}

$myEmployee = new Employee();
$myEmployee->Address = new Address();

我现在如何访问街道?

$street = $myEmployee->$Address->Street;
$street = $myEmployee->Address->Street;

两者都在Eclipse中给我警告。我在考虑:

$street = $myEmployee['Address']->Street;

这是对的吗?

6 个答案:

答案 0 :(得分:5)

$myEmployee->Address->Street;

这是有效的,Eclipse的警告系统对于这样的事情很奇怪。我通常会在这样的实例中关闭它们,让PHP为我做错误报告。

此外,eclipse不支持自动完成您需要做的事情。

答案 1 :(得分:5)

如前所述,您建议使用:

$street = $myEmployee->Address->Street;

完全有效。但是,代码中存在一些可能导致问题的错误。首先,公共成员变量要么声明如下:

public $id;

或者这个(已弃用):

var $id;

您的两者组合不是有效的PHP代码。

此外,你在行尾有两个冒号(:),应该是分号(;)。

希望有所帮助!

答案 2 :(得分:3)

$street = $myEmployee->Address->Street;

应该有效。无论如何,Eclipse抱怨什么?

答案 3 :(得分:0)

为什么不在Employee类的构造函数中创建Address?我猜你最终会创建多个Employee,而不是每次创建一个Employee和一个Address都有两行,你可以创建一个Employee并在舒适的地方陶醉创建并存储在$ myEmployee->地址。

答案 4 :(得分:0)

另一种方法是使用访问者和私有数据成员:

class Address {
   private $Street;

   public function __construct() {}

   public function setStreet($Street) {
       $this->Street = $Street;
   }

   public function getStreet() {
      return $this->Street;
   }
}

/* ... same for Employee ... */

$myEmployee = new Employee();
$myEmployee->setAddress(new Address());

$street = $myEmployee->getAddress()->getStreet();

如果您需要稍后更改内部实现,这将为您提供封装。如果您将类成员公开为公共数据成员,则在客户端代码开始使用您的类时,您将被锁定在其中。

这种方式重构会更容易,而且它也会消除你的警告。

答案 5 :(得分:0)

缺少Eclipse代码完成的原因是代码完成需要类型信息。

在PHP中,这可以通过type hints和注释注释完成。

我不确定您使用的是哪个Eclipse插件,但如果是PDT,请查看code assist的手册:

然后是一个简单的注释注释:

以上员工,您可以添加:

/**
 * @property Address $Address
 */
class Employee 
....