Maison développement back-end tutoriel 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];
    }
Copier après la connexion




------解决方案--------------------
假设这个类的名称: 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)) 这里的&不知有没……
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser les classes et les méthodes en Python Comment utiliser les classes et les méthodes en Python Apr 21, 2023 pm 02:28 PM

Concepts et instances de classes et méthodes Classe (Class) : utilisé pour décrire une collection d'objets avec les mêmes propriétés et méthodes. Il définit les propriétés et méthodes communes à chaque objet de la collection. Les objets sont des instances de classes. Méthode : Fonction définie dans la classe. Méthode de construction de classe __init__() : La classe possède une méthode spéciale (méthode de construction) nommée init(), qui est automatiquement appelée lorsque la classe est instanciée. Variables d'instance : dans la déclaration d'une classe, les attributs sont représentés par des variables. Ces variables sont appelées variables d'instance. Une variable d'instance est une variable modifiée avec self. Instanciation : Créez une instance d'une classe, un objet spécifique de la classe. Héritage : c'est-à-dire qu'une classe dérivée (derivedclass) hérite de la classe de base (baseclass)

Pourquoi NameResolutionError(self.host, self, e) de e et comment le résoudre Pourquoi NameResolutionError(self.host, self, e) de e et comment le résoudre Mar 01, 2024 pm 01:20 PM

La raison de l'erreur est NameResolutionError(self.host,self,e)frome, qui est un type d'exception dans la bibliothèque urllib3. La raison de cette erreur est que la résolution DNS a échoué, c'est-à-dire le nom d'hôte ou l'adresse IP qui était. La tentative de résolution n'a pas pu être trouvée. Cela peut être dû au fait que l'adresse URL saisie est incorrecte ou que le serveur DNS est temporairement indisponible. Comment résoudre cette erreur Il peut y avoir plusieurs façons de résoudre cette erreur : Vérifiez si l'adresse URL saisie est correcte et assurez-vous qu'elle est accessible Assurez-vous que le serveur DNS est disponible, vous pouvez essayer d'utiliser la commande "ping" dans la ligne de commande pour tester si le serveur DNS est disponible Essayez d'accéder au site Web en utilisant l'adresse IP au lieu du nom d'hôte si vous êtes derrière un proxy

Solution à l'erreur fatale PHP : appel à une fonction membre fetch() Solution à l'erreur fatale PHP : appel à une fonction membre fetch() Jun 23, 2023 am 09:36 AM

Lorsque vous utilisez PHP pour le développement d’applications Web, vous devrez souvent utiliser une base de données. Lors de l'utilisation d'une base de données, les messages d'erreur sont très courants. Parmi eux, PHPFatalerror : Calltoamemberfunctionfetch() est une erreur relativement courante qui se produit lors de l'utilisation de PDO pour interroger la base de données. Alors, quelle est la cause de cette erreur et comment la résoudre ? Cet article vous l’expliquera en détail. 1. Cause de l'erreur

Que signifie la classe en python ? Que signifie la classe en python ? May 21, 2019 pm 05:10 PM

Class est un mot-clé en python, utilisé pour définir une classe. La méthode de définition d'une classe : ajoutez un espace après la classe puis ajoutez le nom de la classe ; règles de nom de classe : mettez la première lettre en majuscule, utilisez la casse camel. nommage, tel que [class Dog()].

Remplacer le nom de classe d'un élément à l'aide de jQuery Remplacer le nom de classe d'un élément à l'aide de jQuery Feb 24, 2024 pm 11:03 PM

jQuery est une bibliothèque JavaScript classique largement utilisée dans le développement Web. Elle simplifie les opérations telles que la gestion des événements, la manipulation des éléments DOM et l'exécution d'animations sur les pages Web. Lorsque vous utilisez jQuery, vous rencontrez souvent des situations dans lesquelles vous devez remplacer le nom de classe d'un élément. Cet article présentera quelques méthodes pratiques et des exemples de code spécifiques. 1. Utilisez les méthodes RemoveClass() et AddClass(). JQuery fournit la méthode RemoveClass() pour la suppression.

Comment s'utiliser soi-même en Python Comment s'utiliser soi-même en Python May 17, 2023 pm 10:40 PM

Avant d'introduire l'utilisation de self en Python, introduisons d'abord les classes et les instances en Python. Nous savons que les concepts les plus importants de l'orientation objet sont les classes et les instances. Les classes sont des modèles abstraits, comme les étudiants. représenté par une classe d’étudiants. Les instances sont des « objets » spécifiques créés à partir de classes. Chaque objet hérite des mêmes méthodes de la classe, mais ses données peuvent être différentes. 1. Prenons l'exemple de la classe Student. En Python, la classe est définie comme suit : classStudent(object):pass(Object) indique de quelle classe la classe hérite.

Explication détaillée de l'utilisation de la classe PHP : rendez votre code plus clair et plus facile à lire Explication détaillée de l'utilisation de la classe PHP : rendez votre code plus clair et plus facile à lire Mar 10, 2024 pm 12:03 PM

Lors de l’écriture de code PHP, l’utilisation de classes est une pratique très courante. En utilisant des classes, nous pouvons encapsuler les fonctions et les données associées dans une seule unité, rendant le code plus clair, plus facile à lire et à maintenir. Cet article présentera en détail l'utilisation de PHPClass et fournira des exemples de code spécifiques pour aider les lecteurs à mieux comprendre comment appliquer des classes pour optimiser le code dans des projets réels. 1. Créer et utiliser des classes En PHP, vous pouvez utiliser le mot-clé class pour définir une classe et définir les propriétés et méthodes de la classe.

Erreur Vue : impossible d'utiliser v-bind pour lier correctement la classe et le style, comment le résoudre ? Erreur Vue : impossible d'utiliser v-bind pour lier correctement la classe et le style, comment le résoudre ? Aug 26, 2023 pm 10:58 PM

Erreur Vue : impossible d'utiliser v-bind pour lier correctement la classe et le style, comment le résoudre ? Dans le développement de Vue, nous utilisons souvent la directive v-bind pour lier dynamiquement la classe et le style, mais nous pouvons parfois rencontrer des problèmes, comme l'incapacité d'utiliser correctement v-bind pour lier la classe et le style. Dans cet article, je vais vous expliquer la cause de ce problème et vous proposer une solution. Tout d’abord, comprenons la directive v-bind. v-bind est utilisé pour lier V

See all articles