用户
 找回密码
 入住 CI 中国社区
搜索
查看: 6838|回复: 8
收起左侧

new $class($this) 这种是什么用法

[复制链接]
发表于 2012-7-28 18:03:07 | 显示全部楼层 |阅读模式
这个函数中$this代表什么. $class() 代表什么.$class() 与$class这个变量有什么区别.谢谢.

PHP复制代码
public function __construct()    {
        /** 获取CI句柄 **/
                $this->_CI = & get_instance();
               
                $plugins = $this->_CI->utility->get_active_plugins();//所有可用插件列表 从数据库中或缓存中 返回数组
               
                if($plugins && is_array($plugins))
                {
                        foreach($plugins as $plugin)
                        {
                                $plugin_dir = $plugin['directory'] . '/' . ucfirst($plugin['directory']) . '.php';//数组中有内容 ucfirst() 函数把字符串中的首字符转换为大写。
                               
                                $path = FCPATH . ST_PLUGINS_DIR . '/' . $plugin_dir;
                               
                                /** 仅能识别"插件目录/插件/插件.php"目录下的插件 */
                                if (preg_match("/^[\w\-\/]+\.php$/", $plugin_dir) && file_exists($path))
                                {
                                        include_once($path);//这个函数的目的就是把相关的插件文件引用到具体的控制器中
 
                                        $class = ucfirst($plugin['directory']);
                                       
                                        if (class_exists($class))
                                        {
                                                /** 初始化插件 */
                                                new $class($this);//this是什么
                                        }
                                }
                        }
                }
               
                log_message('debug', "STBLOG: Plugins Libraries Class Initialized");
    }
复制代码

发表于 2012-7-28 19:51:13 | 显示全部楼层
如 $class = Test
new $class() 相当于 new Test(),实例化一个类
$this指代当前类的实例
 楼主| 发表于 2012-7-28 20:48:40 | 显示全部楼层
本帖最后由 viqecel 于 2012-7-28 20:58 编辑
elementwater 发表于 2012-7-28 19:51
如 $class = Test
new $class() 相当于 new Test(),实例化一个类
$this指代当前类的实例 ...

$class 为系统保留字吗 即这样定义.意味着他是类或是其它什么特定含义的东西
发表于 2012-7-28 21:25:47 | 显示全部楼层
viqecel 发表于 2012-7-28 20:48
$class 为系统保留字吗 即这样定义.意味着他是类或是其它什么特定含义的东西 ...

非保留字,其实就是一个变量,new $a(), new $b()……,这些都可以,前提是该函数已经定义过,即通过class_exists($class)来判断,没有特殊含义,只是php的一个特性
 楼主| 发表于 2012-7-28 23:44:32 | 显示全部楼层
本帖最后由 viqecel 于 2012-7-28 23:49 编辑
elementwater 发表于 2012-7-28 21:25
非保留字,其实就是一个变量,new $a(), new $b()……,这些都可以,前提是该函数已经定义过,即通过clas ...

这里应该是动态实例化吧,$class自动被替换为"test"等等具体的类.只是这个$this运行后,变成了空.他应该是代表对自身的实例化的一个动作,而不代表一个具体的值吧,即
new $class($this);循环运行后,比如其中一个变成了new test();
$this消失了.呵.写法真是怪.
发表于 2012-7-29 08:43:13 | 显示全部楼层
这显然是调用类的构造函数,类名是$class,这个类有一个构造函数参数为$this对象所属的类的类型。
 楼主| 发表于 2012-7-29 11:57:19 | 显示全部楼层
yunnysunny 发表于 2012-7-29 08:43
这显然是调用类的构造函数,类名是$class,这个类有一个构造函数参数为$this对象所属的类的类型。 ...

$this对象所属的类的类型是什么?呵.不懂
发表于 2012-7-30 08:31:24 | 显示全部楼层
viqecel 发表于 2012-7-29 11:57
$this对象所属的类的类型是什么?呵.不懂

就是构造函数所属的那个类
发表于 2012-9-30 14:13:44 | 显示全部楼层
$class 是从哪里传值过来的?

本版积分规则