为什么可以直接访问非静态函数?
程序员文章站
2024-01-26 14:07:28
...
今天看Discuz的代码,看到如下的代码:
弄不懂的是,_execute方法不是静态方法,为什么可以直接用DB::_execute执行那?
而我自己写的类里面,必须要把方法设置成static才可以直接通过 类名::方法名 的方式访问那?
请指教,谢谢。
class DB{ function table($table) { return DB::_execute('table_name', $table); } function _execute($cmd , $arg1 = '', $arg2 = '') { static $db; if(empty($db)) $db = & DB::object(); $res = $db->$cmd($arg1, $arg2); return $res; }}
弄不懂的是,_execute方法不是静态方法,为什么可以直接用DB::_execute执行那?
而我自己写的类里面,必须要把方法设置成static才可以直接通过 类名::方法名 的方式访问那?
请指教,谢谢。
回复讨论(解决方案)
检错的级别不同而已
class T { function foo($s) { echo $s, PHP_EOL; }}T::foo(123);error_reporting(E_ALL ^ E_STRICT);T::foo('abc');
并没有这个DB 类
只有在 \source\class\class_core.php 的最后一行
class DB extends discuz_database {}
不知道你的版本是多少
上一篇: php中使用gd库实现远程图片下载实例,
下一篇: 这个初始化函数里面为什么会报错??
推荐阅读
-
为什么可以直接访问非静态函数?
-
php中两个**可以直接求一个数的n次方 为什么还要有pow()函数
-
为什么静态方法无法直接调用非静态成员变量和方法
-
为什么可以直接访问非静态函数?
-
Python中既然可以直接通过父类名调用父类方法为什么还会存在super函数?
-
Python中既然可以直接通过父类名调用父类方法为什么还会存在super函数?
-
php中两个**可以直接求一个数的n次方 为什么还要有pow()函数
-
在 Python 中,为什么 pow 这样的函数可以直接调用,而 floor 这样的函数得先导入模块?
-
在 Python 中,为什么 pow 这样的函数可以直接调用,而 floor 这样的函数得先导入模块?
-
为什么静态方法无法直接调用非静态成员变量和方法