在PHP中无法访问继承的函数

在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的文章,并使用此结构构建了:

文章

--儿童用品

现在我想访问从Article类继承的ChildArticle类中的函数

这是我的文章课:

<?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