我的问题是我有两个函数,我尝试在另一个函数中调用一个但是我得到的错误是未定义的。这是我的代码:
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> → '.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;的情况下调用它。但它是一样的。
请有人帮助我吗?
答案 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);