我一直在阅读有关嵌套函数需求的问题的答案,但我仍然没有弄清楚1)为什么我的代码是错误的2)我如何修复它以使我写的工作或更改我的脚本因此它更容易接受(对于解析器而且对经验丰富的开发人员而言)。让我提一下,我是PHP OOP的新手......
我的想法是想要使用我之前在很多其他函数中定义的函数,所以它每次都会让我重写代码。
这是错误的代码,然后抛出一个致命的错误“调用未定义的函数”指向我在getMedia()中调用selectMediaIds()的行...(仅供参考我有意省略变量初始化,构造函数,吸气剂,二传手等,使我的帖子更紧凑。)
<?php
class MediaManager {
private function selectMediaIds (MObject $object) {
$medias = array ();
$req = $this -> _db -> query ('SELECT media_idMedia FROM mObject_has_media WHERE mObject_idmObject = ' . $object -> id ());
while ($data = $req -> fetch (PDO::FETCH_ASSOC)) {
$medias[] = $data;
}
$req -> closeCursor ();
return $medias;
}
public function getMedia (MObject $object) {
$medias = array ();
$mediaIds = selectMediaIds ($object);
if ($mediaIds[0] != null) {
foreach ($mediaIds as $id) {
$req = $this -> _db -> query ('SELECT * FROM media WHERE idMedia = ' . $id);
$req -> fetch ();
$medias[] = $req;
//$medias[] = new Media ($req);
}
return $medias;
}
}}?>
感谢您的回答!
答案 0 :(得分:3)
这与“嵌套”函数无关,并且从另一个函数调用函数来重用代码确实是首先使用函数的重点。
您的问题是selectMediaIds
不是全局函数,而是类MediaManager
的私有方法 - 它是该类的“部分”,并且可以引用该类的当前实例魔术变量$this
。
要调用此类方法,您必须使用object->method
表示法调用它,因此需要使用$this->selectMediaIds($object)
。这告诉PHP您要在该特定对象selectMediaIds
内调用$this
,您知道该对象是类MediaManager
的实例。
这与您在编写$req->fetch();
答案 1 :(得分:1)
selectMediaIds
在类MediaManager
的范围内定义。这就是它应该作为$this->selectMediaIds()
加入的原因。
调用selectMediaIds
而不定义范围意味着范围是全局的,您肯定没有定义selectMediaIds
函数。