【问题标题】:php Class calling a function inside another function errorphp类调用另一个函数内部的函数错误
【发布时间】:2011-11-20 21:45:48
【问题描述】:

我有以下类,里面的功能很少。当我在Diskspace() 函数中调用get_dir_size() 时出现错误。它不承认它。我究竟做错了什么。此代码用于创建表达式引擎插件。

致命错误:调用未定义函数 get_dir_size()

class DiskSpace
{

    public $return_data = "";
    public function Diskspace()
    {
        $this->EE =& get_instance();

        $dir_name = $_SERVER['DOCUMENT_ROOT']."/userfiles/";
        /* 1048576 bytes == 1MB */
        $total_size= round((get_dir_size($dir_name) / 1048576),2) ;
         $this->return_data = $total_size;

    }

    public function get_dir_size($dir_name){
        $dir_size =0;
        if (is_dir($dir_name)) {
            if ($dh = opendir($dir_name)) {
                while (($file = readdir($dh)) !== false) {
                    if($file !="." && $file != ".."){
                        if(is_file($dir_name."/".$file)){
                            $dir_size += filesize($dir_name."/".$file);
                        }
                        /* check for any new directory inside this directory */
                        if(is_dir($dir_name."/".$file)){
                            $dir_size +=  get_dir_size($dir_name."/".$file);
                        }
                    }
                }
            }
        }
        closedir($dh);
        return $dir_size;
    }
}

【问题讨论】:

    标签: php class function expressionengine


    【解决方案1】:

    将调用 get_dir_size($dir_name) 的行更改为:-

    $total_size= round(($this->get_dir_size($dir_name) / 1048576),2) ;
    

    此代码还有一些问题 这是什么 ? $this->EE = & get_instance(); 如果没有执行声明它的if 语句,执行closedir($dh); 时也会出错。

    【讨论】:

    • 我试过了。我仍然遇到同样的错误undefined function get_dir_size()
    • 里面还有一个get_dir_size ... $dir_size += get_dir_size($dir_name."/".$file);
    • @harald 啊,原来如此。很好发现。
    【解决方案2】:

    请记住,当您在对象内部调用对象自己的函数时,请使用 $this 指针变量。

    $total_size= round((get_dir_size($dir_name) / 1048576),2) ;
    

    改成

     $total_size= round(($this->get_dir_size($dir_name) / 1048576),2) ;
    

    如果您告诉我们错误发生在哪一行,那也很好。也很高兴看到完整的错误日志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-22
      • 2012-06-30
      • 2017-05-08
      • 2019-09-11
      • 2018-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多