検索
ホームページバックエンド開発PHPチュートリアルよく理解できないコードが数行あります。分析と対処方法については専門家に相談してください。

よく理解していないコードが数行あります。解析するのを手伝ってください。
このコードは ThinkPHP フレームワークの小さな断片から抜粋したものです

PHP コード
<!--

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 //このプロパティは配列であることに注意してください。


この関数は 2 つの関数を実装します:
1. ファクトリ クラス: オブジェクトの作成に使用されます。 メソッドが空の場合は、クラスが返されます。
2. 特定のクラスのメソッドを実行します。 メソッドが空でない場合は、メソッドの実行結果が返されます。

if(!isset(self::$_instance[$identify])) { // 静的メソッドへの参照には Self を使用します。 Self: 現在のオブジェクトではなく、現在のクラス自体を表します。

if(class_exists($class)){ //これは、このクラス ファイルが存在するかどうかを判断するためのものです。もちろん、これはカプセル化されたメソッドです。これは 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 がとてもわかりやすく説明してくれました
------解決策---------
この関数は 2 つの関数を実装します:
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 までご連絡ください。
PHPセッションの概念を簡単に説明してください。PHPセッションの概念を簡単に説明してください。Apr 26, 2025 am 12:09 AM

phpssionsStrackuserdataacrossmultiplepagerequestsusingauniqueidstoredinacookie.here'showtomanageetheemefectively:1)Startassession withsession_start()andstoredatain $ _ session.2)RegeneratesseSsessidafterloginwithsession_id(the topreventes_id)

PHPセッションに保存されているすべての値をどのようにループしますか?PHPセッションに保存されているすべての値をどのようにループしますか?Apr 26, 2025 am 12:06 AM

PHPでは、次の手順を通じてセッションデータを繰り返すことができます。1。session_start()を使用してセッションを開始します。 2。$ _Sessionアレイのすべてのキー価値ペアを介してforeachループを反復します。 3.複雑なデータ構造を処理する場合、is_array()またはis_object()関数を使用し、print_r()を使用して詳細情報を出力します。 4.トラバーサルを最適化する場合、ページングを使用して、一度に大量のデータの処理を避けることができます。これにより、実際のプロジェクトでPHPセッションデータをより効率的に管理および使用するのに役立ちます。

ユーザー認証にセッションを使用する方法を説明します。ユーザー認証にセッションを使用する方法を説明します。Apr 26, 2025 am 12:04 AM

このセッションは、サーバー側の状態管理メカニズムを介してユーザー認証を実現します。 1)セッションの作成と一意のIDの生成、2)IDはCookieを介して渡されます。3)サーバーストアとIDを介してセッションデータにアクセスします。

PHPセッションにユーザーの名前を保存する方法の例を挙げてください。PHPセッションにユーザーの名前を保存する方法の例を挙げてください。Apr 26, 2025 am 12:03 AM

tostoreauser'snameInappession、starthessession withsession_start()、thensignthenameto $ _session ['username']。1)ousession_start()toinitializethessession.2)assighttheuser'snameto $ _ session ['username']

PHPセッションを失敗させる可能性のあるいくつかの一般的な問題は何ですか?PHPセッションを失敗させる可能性のあるいくつかの一般的な問題は何ですか?Apr 25, 2025 am 12:16 AM

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッション関連の問題をどのようにデバッグしますか?PHPでセッション関連の問題をどのようにデバッグしますか?Apr 25, 2025 am 12:12 AM

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()が複数回呼び出されるとどうなりますか?session_start()が複数回呼び出されるとどうなりますか?Apr 25, 2025 am 12:06 AM

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでセッションのライフタイムをどのように構成しますか?PHPでセッションのライフタイムをどのように構成しますか?Apr 25, 2025 am 12:05 AM

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール