子构造函数不维护变量

时间:2013-02-08 14:58:13

标签: php class constructor

我发现了一个扩展抽象父类的子类的奇怪问题 我这样叫我的孩子班:

$atts['ad_name'] = 'Test';
$atts['ad_type'] = $_REQUEST['ad_type'];
$add_ad = new wpam_ad_form( $atts );

我的子构造函数看起来像这样:

public function __construct( $atts ) {
    parent::__construct( $atts );
    echo "<br/><br/>New window child: " . $this->ad_new_window;
    echo "<br/>Ad Name child: " . $this->ad_name;
}

我的(简化)父构造函数如下所示:

$this->ad_type = $atts['ad_type'];
$this->ad_name = stripslashes_deep( $atts['ad_name'] );
$this->ad_content = stripslashes_deep( $atts['ad_content'] );
$this->ad_image = $atts['ad_image'];
$this->ad_url = $atts['ad_url'];
$this->ad_prehtml = stripslashes_deep( $atts['ad_prehtml'] );
$this->ad_posthtml = stripslashes_deep( $atts['ad_posthtml'] );
$this->ad_new_window = ( $atts['ad_new_window'] != "" ? $atts['ad_new_window'] : 1 );
$this->ad_active = ( $atts['ad_active'] != "" ? $atts['ad_active'] : 1 );
$this->ad_archived = 0;
$this->ad_checked = 0;

echo "<br/>New window parent: " . $this->ad_new_window;
echo "<br/>Ad name parent: " . $this->ad_name;

这些回声的输出给了我:

New window parent: 1
Ad name parent: Test

New window child:
Ad Name child: 

我以前从未见过这个。这些值正在传递给子构造函数并正确地传递给父构造函数。父构造函数正在正确设置值。然后在父构造函数运行之后,子构造函数中没有值$ this this属性。是什么导致值不从父类返回子类?

1 个答案:

答案 0 :(得分:3)

如果没有在父类中看到您的属性声明,则很难说清楚。但乍一看,这些属性可能已设置为private,这限制了它们对该类本身(父级)的访问/可见性,而且任何扩展它的类都不能直接访问它们。

如果是这种情况,那么您可以选择将其设置为protectedpublic,具体取决于您的需求。

有关这些关键字的详细信息,请查看documentation entitled "Visibility"

部分