猿问

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

我尝试说明有关 PHP 的文章并使用以下结构构建:


文章


-- 儿童文章


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


这是我的文章类:


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

}


这是我的 ChildArticle 类:


class ChildArticle extends Articles

{


}

现在我想阅读子文章的订单号:


    foreach ($article->getChildArticles() as $child){

        echo "Child: {$child->getOrdernumber()}<br>";

    }

我的 readChildArticles 功能:


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");


}

我的输出是这样的:


Child: 

Child:

and so on 

如果我通过 $child->ordernumber 获得订单号,它就可以工作。


为什么我的 ChildArticle 类不完全像参数一样接管函数?


你能给我一个提示我如何解决这个问题或者我可以在哪里阅读它?


holdtom
浏览 132回答 1
1回答

慕村9548890

问题在于 PDO 构造对象的方式:它创建类 (&nbsp;ChildArticle) 的一个实例,然后将所有列设置为其上的属性。由于$ordernumberis&nbsp;private,这会在每个类中创建一个单独的属性,即Article::$ordernumber和ChildArticle::$ordernumber是两个完全独立的属性。中的方法Article尝试访问Article::$ordernumber.使属性至少为protected,或更改实例化类的方式。如果您没有充分理由使用单独的属性和 getter,您不妨考虑制作属性public并摆脱 getter 方法。
随时随地看视频慕课网APP
我要回答