Php 将类实例用作另一个类的属性

Php 将类实例用作另一个类的属性,php,class,Php,Class,我想创建一个类,将另一个类的实例用作属性。大概是这样的: class person { var $name; var $address; } class business { var $owner = new person(); var $type; } 当然,这是行不通的,我尝试了一些变化。我在谷歌搜索中找到的所有内容都只引用嵌套的类定义(classa{classb{}) 是否可以将一个类实例放在另一个类中?如果没有,是否有合理的解决方法?不能在属性/属性/

我想创建一个类,将另一个类的实例用作属性。大概是这样的:

class person
{
    var $name;
    var $address;
}

class business
{
    var $owner = new person();
    var $type;
}
当然,这是行不通的,我尝试了一些变化。我在谷歌搜索中找到的所有内容都只引用嵌套的类定义(
classa{classb{}


是否可以将一个类实例放在另一个类中?如果没有,是否有合理的解决方法?

不能在属性/属性/字段声明中初始化类

class person
{
    public $name;
    public $address;
}

class business
{
    public $owner;
    public $type;

    public function __construct()
    {
        $this->owner = new person();
    }
}
:

[Property]声明可能包括初始化,但此初始化必须是一个常量值——也就是说,它必须能够在编译时进行计算,并且不能依赖运行时信息进行计算

如果需要新实例具有包含类实例的属性,则需要在构造函数中分配它:

class business {
    public $owner;

    public function __construct() {
        $this->owner = new person();
    }
}


另外,请确保使用关键字(
public
protected
private
)而不是
var
,您不能在属性/属性/字段声明中初始化类

:

[Property]声明可能包括初始化,但此初始化必须是一个常量值——也就是说,它必须能够在编译时进行计算,并且不能依赖运行时信息进行计算

如果需要新实例具有包含类实例的属性,则需要在构造函数中分配它:

class business {
    public $owner;

    public function __construct() {
        $this->owner = new person();
    }
}


另外,请确保使用关键字(
public
protected
private
)而不是
var
,,如果您想调用其他类方法,可以尝试这样使用:

class person
{
    public $name;
    public $address;
}

class business {
 public $owner;
    function __construct( $obj ) {
        $this->owner = $obj;
    }

}   
$a = new person();
$b = new business($a);

如果您打算调用其他类方法,可以尝试这样使用:

class person
{
    public $name;
    public $address;
}

class business {
 public $owner;
    function __construct( $obj ) {
        $this->owner = $obj;
    }

}   
$a = new person();
$b = new business($a);

您可以实例化您的
person
类,并将其设置为
business
类构造函数中的
owner
属性值,但不要使用
var
并使用适当的关键字。。。。您还没有使用PHP4,是吗?我和Mark Baker在一起,请解释为什么不能使用例如business::\uu construct()来设置$owner属性?您是在构造中创建person的实例,还是将其作为参数传递给构造函数?@qrazi-没有特殊原因。我非常擅长过程PHP和目标C。这是我第一次尝试用PHP进行目标编程。因此,我正在找出我的局限性。我可能会结合使用上面提到的所有内容以及get_class()函数来禁止尝试将$owner字段设置为错误的类型。@Andrew我认为您不需要get_class()。如果在构造函数中实例化,则知道它是什么类。如果像suchit的答案一样将其作为一个参数,那么键入hint这个参数是有意义的。您可以实例化您的
person
类,并将其设置为
business
类构造函数中的
owner
属性值,但不要使用
var
并使用适当的关键字。。。。您还没有使用PHP4,是吗?我和Mark Baker在一起,请解释为什么不能使用例如business::\uu construct()来设置$owner属性?您是在构造中创建person的实例,还是将其作为参数传递给构造函数?@qrazi-没有特殊原因。我非常擅长过程PHP和目标C。这是我第一次尝试用PHP进行目标编程。因此,我正在找出我的局限性。我可能会结合使用上面提到的所有内容以及get_class()函数来禁止尝试将$owner字段设置为错误的类型。@Andrew我认为您不需要get_class()。如果在构造函数中实例化,则知道它是什么类。如果你像suchit的答案一样把它当作一个参数,那么输入hint这个参数是有意义的。这可能是最好的答案。我可能会使用类似的东西。我最担心的是只允许person类使用属性$a。我可能会使用get_class()函数来测试传递给构造函数的变量的有效性。谢谢@Andrew或使用类型暗示:
function\uu构造(person$obj)
这可能是最好的答案。我可能会使用类似的东西。我最担心的是只允许person类使用属性$a。我可能会使用get_class()函数来测试传递给构造函数的变量的有效性。谢谢@Andrew或使用类型提示:
function\uu构造(person$obj)
请参见