在PHP中无法访问继承的函数
我试图举例说明有关PHP的文章,并使用此结构构建了: 文章 --儿童用品 现在我想访问从Article类继承的ChildArticle类中的函数 这是我的文章课:在PHP中无法访问继承的函数,php,function,inheritance,Php,Function,Inheritance,我试图举例说明有关PHP的文章,并使用此结构构建了: 文章 --儿童用品 现在我想访问从Article类继承的ChildArticle类中的函数 这是我的文章课: <?php namespace App\Article; use PDO; class Articles { private $id; private $name; private $cid; private $ordernumber; private $description; private $descriptionLong
<?php
namespace App\Article;
use PDO;
class Articles
{
private $id;
private $name;
private $cid;
private $ordernumber;
private $description;
private $descriptionLong;
private $childArticles;
/**
* @return mixed
*/
public function getId()
{
return $this->id;
}
/**
* @return mixed
*/
public function getName()
{
return $this->name;
}
/**
* @return mixed
*/
public function getCid()
{
return $this->cid;
}
/**
* @return mixed
*/
public function getOrdernumber()
{
return $this->ordernumber;
}
/**
* @return mixed
*/
public function getDescription()
{
return $this->description;
}
/**
* @return mixed
*/
public function getDescriptionLong()
{
return $this->descriptionLong;
}
/**
* @return mixed
*/
public function getChildArticles()
{
return $this->childArticles;
}
function readChildArticles(PDO $pdo){
$stmt = $pdo->prepare(
"SELECT articleID as id, ordernumber FROM `s_articles_details` WHERE ordernumber LIKE :ordernumberWOD AND ordernumber NOT LIKE :ordernumber"
);
$stmt->execute([
'ordernumberWOD'=>$this->ordernumber.".%",
'ordernumber'=>$this->ordernumber
]);
$this->childArticles = $stmt->fetchAll(PDO::FETCH_CLASS,"App\\Article\\ChildArticle");
}
}
class ChildArticle extends Articles
{
}
现在我想看一下子文章的顺序号:
foreach ($article->getChildArticles() as $child){
echo "Child: {$child->getOrdernumber()}<br>";
}
我的输出如下:
Child:
Child:
and so on
如果我通过$child->ordernumber获得ordernumber,它就会工作
为什么我的ChildArticle类不像参数那样接管函数
你能给我一个提示,我如何解决这个问题,或者在哪里可以读到它
thx:)问题在于PDO构造对象的方式:它创建类的实例(
ChildArticle
),然后将所有列设置为其属性。由于$ordernumber
是私有的
,因此这会在每个类中创建一个单独的属性,即文章::$ordernumber
和儿童文章::$ordernumber
是两个完全独立的属性。Article
中的方法尝试访问Article::$ordernumber
使属性至少受到保护,或者更改实例化类的方式
如果您没有使用单独的属性和吸气剂的充分理由,您不妨考虑使用属性<代码>公共< /代码>,并去掉GETTER方法。< /P>,您在哪里设置<代码> $OrthNo.< /代码>?只要
$ordernumber
有一个值。。。请参阅:@Rudi No,您发布的是readChildArticles()
。这与getChildArticles()
不同,问题可能是$ordernumber
是私有的
。PDO在子级上设置属性,但父级尝试读取的属性具有不同的作用域(因为private
)。非常感谢:)我认为您应该始终使用setter和getter查询参数,而不是直接查询?大多数情况下,这太过分了。如果您有getter和setter,它们除了获取和设置值之外什么都不做,那么它就等同于首先拥有public
属性。如果只有getter,那么至少有一个只读对象;PHP的问题在于,您很难在以后透明地从公共属性切换到getter/setter(它做一些重要的事情)。在其他语言中,您可以添加getter/setter,同时保持$foo->bar=…
语法不变。Soooo…试着预测你的需求。谢谢你的解释和花时间给我-
Child:
Child:
and so on