引用类文件的奇怪问题
本帖最后由 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
报什么错是关键
我用的是nginx,只看到HTTP 500错误。
等下我再去开错误报告。
其实都有哪些情况会引起这样的错误呢? 把报错信息贴上来吧 搞定了。
开了错误信息之后,看到这么一句话:
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
bottom 发表于 2012-6-30 11:52 static/image/common/back.gif
搞定了。
开了错误信息之后,看到这么一句话:
减号不能用作标识符这个应该比较容易理解,因为减号是一个运算符,如果减号可以用作标识符,那 $abc-def 你怎么区分是在做减法还是一个变量名呢?
PS: 你分享的经验很不错~ Hex 发表于 2012-6-30 15:10 static/image/common/back.gif
减号不能用作标识符这个应该比较容易理解,因为减号是一个运算符,如果减号可以用作标识符,那 $abc-def...
受教了。
页:
[1]