PHP - 定义时调用未定义的函数

时间:2014-01-05 17:24:11

标签: php mysql function undefined

我的问题是我有两个函数,我尝试在另一个函数中调用一个但是我得到的错误是未定义的。这是我的代码:

        class LoggedUser extends User {
public function rrmdir($dir) {
       if (is_dir($dir)) {
         $objects = scandir($dir);
         foreach ($objects as $object) {
           if ($object != "." && $object != "..") {
             if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
           }
         }
         reset($objects);
         rmdir($dir);
       }
     }

    public function usunGalerie($galeria,$log,$folder){
        require_once('db_connect.inc');
        $query = "DELETE FROM galery WHERE Nazwa='$galeria' AND Autor='$log';";
        $result = @mysql_query($query);
        if(!$result = mysql_query($query))
            {
                echo '<code>$query</code> &rarr; '.mysql_error().' ('.mysql_errno().')';

            }
        $query = "DELETE FROM zdjecie WHERE Galeria='$galeria' AND Autor='$log';";
        $result2 = @mysql_query($query);
        if ($result && $result2) {          
                echo 'Usunięto galerię '.$galeria;
                $this->rrmdir($folder);
            } else {
                echo 'Wystąpił błąd.';
            }
    }
}

然后我得到:调用未定义的函数rrmdir() 我试着在没有$ this-&gt;的情况下调用它。但它是一样的。

请有人帮助我吗?

1 个答案:

答案 0 :(得分:2)

一旦进入面向对象的PHP世界,范围界定的工作方式就会发生变化。一旦声明了类的实例,您现在必须引用类的实例以及函数本身。这在其他语言(如Java)中的工作方式不同,其中假定在非静态上下文中实例本身调用方法。

以下行再次调用该函数

if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);

即使在它调用的函数内部(递归,要小心),你仍然需要引用对象实例。确保对rrmdir的所有调用都包含$ this

if (filetype($dir."/".$object) == "dir") $this->rrmdir($dir."/".$object); else unlink($dir."/".$object);