我一直在阅读关于SO嵌套功能的疑问的答案,但我仍然没有弄清楚1)为什么我的代码是错误的,以及2)如何修复它以使我写的工作或更改脚本,所以(对于解析器,但对于经验丰富的开发人员也可以接受)。让我说我是PHP OOP的新手...
我的想法是我想使用以前在许多其他函数中定义的函数,因此可以节省每次重写代码的麻烦。
这是错误的代码,然后引发致命错误“指向未定义的函数”,该行指向我在getMedia()中调用selectMediaIds()的行...(仅供参考,我故意省略了变量初始化,构造函数,getters,setters等等,使我的帖子更加紧凑。)
<?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;
}
}}?>
谢谢您的回答!
这与“嵌套”函数无关,从另一个位置调用一个函数以重用代码确实是使用函数的全部重点。
您的问题是,这selectMediaIds
不是全局函数,而是类的私有方法MediaManager
-它是该类的“一部分”,并且可以在magic变量下引用该类的当前实例$this
。
为了调用这种方法,您必须使用object->method
符号来调用它,因此您需要使用$this->selectMediaIds($object)
。这告诉PHP您想selectMediaIds
在该特定对象中调用$this
,您知道这是类的实例MediaManager
。
这与您编写时与数据库调用一起使用的操作相同 $req->fetch();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句