首頁 後端開發 php教程 有几行代码不是太懂,请高手帮忙分析,该怎么处理

有几行代码不是太懂,请高手帮忙分析,该怎么处理

Jun 13, 2016 pm 01:51 PM
class method self

有几行代码不是太懂,请高手帮忙分析
这个代码摘自ThinkPHP框架里的某个小片段

PHP code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->    /**
     +----------------------
     * 取得对象实例 支持调用类的静态方法
     +----------------------
     * @param string $class 对象类名
     * @param string $method 类的静态方法名
     +----------------------
     * @return object
     +----------------------
     */
    static public function instance($class,$method='') {
        $identify   =   $class.$method;
        if(!isset(self::$_instance[$identify])) { //这一行的self::不是太明白怎么回事
            if(class_exists($class)){ //这个是判断如果类存在?
                $o = new $class();
                if(!empty($method) && method_exists($o,$method)) 
                    self::$_instance[$identify] = call_user_func_array(array(&$o, $method)); //这一行怎么解释?
                else
                    self::$_instance[$identify] = $o; //这一行怎么解释?
            }
            else
                halt(L('_CLASS_NOT_EXIST_').':'.$class); //halt从来没见过这东西……
        }
        return self::$_instance[$identify];
    }
登入後複製




------解决方案--------------------
假设这个类的名称: Core.php
Core.php里面有一个静态属性
public static $_instance //注意这个属性是数组。


这函数实现了两种功能:
1. 工厂类:用于创建对象。 如果方法为空,则返回类。
2. 执行某个类的方法。 方法不为空则返回方法执行的结果。

 if(!isset(self::$_instance[$identify])) { //静态方法的引用要用Self 。 Self:表示当前类本身,不是当前对象。

if(class_exists($class)){ //这个是判断这个类文件是否存在,当然这个是封装后的方法。你可以理解为IO操作中 File_exist(filename).

self::$_instance[$identify] = call_user_func_array(array(&$o, $method)); // 这个实际上是反射调用某个类的方法。

self::$_instance[$identify] = $o; // 如果方法名称为空,就把对象放入数组中。

halt(L('_CLASS_NOT_EXIST_').':'.$class); //halt 单词意思是停止。 好像是停止编译吧。
------解决方案--------------------
okayu已经解释的很好了
------解决方案--------------------
这函数实现了两种功能:
1. 工厂类:用于创建对象。 如果方法为空,则返回类。
2. 执行某个类的方法。 方法不为空则返回方法执行的结果。
------------------------
读代码要从大局着眼。
解释的真不错。也跟着学习了。

从大入小。
------解决方案--------------------
这个类是一注册类! 不能说是工场类!有局限性

1) 如果是类没有初始化,则初始化,存在类属性数组中;如果类已初始化,则返回已初始化的类。(工场类应该每次均返回一个新实例;

2) 如果有方法,但返回调用方法的结果。(无法传参,调用的是任意方法,而不是所说的静态方法)

call_user_func_array(array(&$o, $method)) 这里的&不知有没有必要。




------解决方案--------------------
&$o 在php中 貌似就是$o
和C的指针类似 但又有区别!
------解决方案--------------------
探讨
这个类是一注册类! 不能说是工场类!有局限性

1) 如果是类没有初始化,则初始化,存在类属性数组中;如果类已初始化,则返回已初始化的类。(工场类应该每次均返回一个新实例;

2) 如果有方法,但返回调用方法的结果。(无法传参,调用的是任意方法,而不是所说的静态方法)

call_user_func_array(array(&$o, $method)) 这里的&不知有没……
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Python中的class類別和method方法的使用方法 Python中的class類別和method方法的使用方法 Apr 21, 2023 pm 02:28 PM

Python中的class類別和method方法的使用方法

為什麼NameResolutionError(self.host, self, e) from e,怎麼解決 為什麼NameResolutionError(self.host, self, e) from e,怎麼解決 Mar 01, 2024 pm 01:20 PM

為什麼NameResolutionError(self.host, self, e) from e,怎麼解決

PHP Fatal error: Call to a member function fetch()的解決方法 PHP Fatal error: Call to a member function fetch()的解決方法 Jun 23, 2023 am 09:36 AM

PHP Fatal error: Call to a member function fetch()的解決方法

使用jQuery替換元素的class名稱 使用jQuery替換元素的class名稱 Feb 24, 2024 pm 11:03 PM

使用jQuery替換元素的class名稱

python中class是什麼意思 python中class是什麼意思 May 21, 2019 pm 05:10 PM

python中class是什麼意思

Python中的self怎麼使用 Python中的self怎麼使用 May 17, 2023 pm 10:40 PM

Python中的self怎麼使用

SpringBoot怎麼透過自訂classloader加密保護class文件 SpringBoot怎麼透過自訂classloader加密保護class文件 May 11, 2023 pm 09:07 PM

SpringBoot怎麼透過自訂classloader加密保護class文件

PHP Class用法詳解:讓你的程式碼更清楚易讀 PHP Class用法詳解:讓你的程式碼更清楚易讀 Mar 10, 2024 pm 12:03 PM

PHP Class用法詳解:讓你的程式碼更清楚易讀

See all articles