我发现了一个扩展抽象父类的子类的奇怪问题 我这样叫我的孩子班:
$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属性。是什么导致值不从父类返回子类?
答案 0 :(得分:3)
如果没有在父类中看到您的属性声明,则很难说清楚。但乍一看,这些属性可能已设置为private
,这限制了它们对该类本身(父级)的访问/可见性,而且任何扩展它的类都不能直接访问它们。
如果是这种情况,那么您可以选择将其设置为protected
或public
,具体取决于您的需求。
有关这些关键字的详细信息,请查看documentation entitled "Visibility"。
部分