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;
这是对的吗?
答案 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
....