bottom 发表于 2012-6-30 09:07:57

引用类文件的奇怪问题

本帖最后由 bottom 于 2012-6-30 11:53 编辑

我在CI下面自己写了一个库,用于封装一些常用的操作。但是在写动态调用代码的时候遇到了一个问题,就是在下面的代码中:
//生成实际命令类所在文件路径
      $filepath = APPPATH . 'libraries/Seashell/bin/' . $command .'.php';
      //判断文件是否存在
      if(file_exists($filepath))
      {
            //存在,引入实际命令类
            require $filepath;
            //实际命令类名称首字母大写
            $class_name = ucfirst($command);
            //调试代码
            $this->response = $class_name;
                return;
            //判断实际命令类是否存在
            if(class_exists($class_name, FALSE))
            {
               
                //建立实际命令类实例,传入CI的资源变量
                //$this->instance = new $class_name($this->CI);
                //调用执行方法,保存返回值到$response中
                //$this->response = $this->instance->run($args);
               
            }
            else
            {
                //否则,抛出异常
                throw new Seashell_Exception('没有此命令的定义', 'Seashell');
                die();
            }
      }
      else
      {
            //否则,抛出异常
            throw new Seashell_Exception('命令不存在!', 'Seashell');
            die();
      }
      

比如说我现在的$command是“delete-ticket”,那么就应该引用文件APPPATH/libraries/Seashell/bin/delete-ticket.php。这个文件已经存在,里面的内容为:

<?phpif ( ! defined('BASEPATH')) exit('No direct script access allowed');

//这里是引用另外的一个基类文件
require dirname(__FILE__).'/../share/Base.php';

class Delete-ticket {
}

现在有一个问题就是,当delete-ticket.php里面没有Delete-ticket类的定义,只有require一句的时候,之前的代码能够正常运行到“$this->response = $class_name;”这一句并返回。但是如果有Delete-ticket类的定义时,不管有没有require语句,都报错。

百思不得其解,求高手指点。

Hex 发表于 2012-6-30 09:45:00

报什么错是关键

bottom 发表于 2012-6-30 09:59:12

Hex 发表于 2012-6-30 09:45
报什么错是关键

我用的是nginx,只看到HTTP 500错误。
等下我再去开错误报告。
其实都有哪些情况会引起这样的错误呢?

浪迹天涯 发表于 2012-6-30 11:26:14

把报错信息贴上来吧

bottom 发表于 2012-6-30 11:52:57

搞定了。
开了错误信息之后,看到这么一句话:
Parse error: syntax error, unexpected '-', expecting '{' in /var/www/application/libraries/Seashell/bin/delete-ticket.php on line 13

原来类名里面不能用“-”号~修正就好了。不过还是不清楚php这样设计的用意。

顺便放一下nginx里面开错误报告要改的设置,Ubuntu12.04下默认是不出错误报告的。
一个是fastcgi_params,里面的"fastcgi_intercept_errors"要改成off
第二个是php.ini,里面的display_errors要设成on
最后一个是/etc/php5/fpm/pool.d/www.conf,这个比较偏门,里面的php_flag要去掉注释,并设为on

Hex 发表于 2012-6-30 15:10:14

bottom 发表于 2012-6-30 11:52 static/image/common/back.gif
搞定了。
开了错误信息之后,看到这么一句话:



减号不能用作标识符这个应该比较容易理解,因为减号是一个运算符,如果减号可以用作标识符,那 $abc-def 你怎么区分是在做减法还是一个变量名呢?

PS: 你分享的经验很不错~

bottom 发表于 2012-6-30 19:00:14

Hex 发表于 2012-6-30 15:10 static/image/common/back.gif
减号不能用作标识符这个应该比较容易理解,因为减号是一个运算符,如果减号可以用作标识符,那 $abc-def...

受教了。
页: [1]
查看完整版本: 引用类文件的奇怪问题