オートロードクラス __autoload() の使用法の簡単な紹介
在面向对象编程中,都是以对象为单位的操作,如果我有两个不同的类,类A和类B,在同一个文件里,实例化对象,就能在这个文件同时调用类A和类B的函数
<?php #a.php class A{ public function funA() { echo 'The class:'.class.'<br/>'; } } class B{ public function funB() { echo 'The class:'.class.'<br/>'; } } $a = new A(); $b = new B(); $a->funA(); //The class:A $b->funB(); //The class:B
两个类都在同一个文件,所有能运行成功,但现在大部分应用都分MVC,不同类专门处理特定的事物,比如C(Controller),只执行与事物有关的逻辑操作,这些文件很明显分属于不同目录下:
|—root
|—controller
|—controllerA.php
|—model
|—modelA.php
|—view
|—viewA.php
这时我要在modelA.php里怎么引用controllerA.php的函数呢?这就用到autoload()了。
<?php #保存在MyClass.php class MyClass { public function getNamespace() { return get_class($this); } }
现在我们在同级目录下引用这个类
<?php function autoload($name) { $file = realpath(DIR).'/'.$name.'.php'; if(file_exists($file)) { require_once($file); if(class_exists($name,false)) { return true; } return false; } return false; } $obj = new MyClass(); echo $obj->getNamespace(); //输出 MyClass;
当你引用不存在的类时,autoload就会被调用,并且你的类名会被作为参数传送过去(当你同时使用命名空间,包含命名空间部分会一起作为参数传送)。
下面我们把命名空间和自动加载类合并使用
命名空间,PHP从5.3开始支持命名空间(namespace),这个在C语言里非常常见,刚开始我不理解,直到我完整接触一个项目,需要加载在不同目录下Class时,恍然大悟。OK,下面讲一讲自己的理解吧。
用不同的命名空间区别相同的函数名,同时命名空间也可以作为引入类文件的路径。
(在WEB项目中,当在client输入一个url时,一般会有一个入口文件,在这个文件里解析你要调用的controller,以及传递的参数,然后动态的加载相应类文件,这其实就牵扯到一点路由规则,当然还有另外一种,在项目初始化之初就把所有类文件全部加载在内存中,这样,每次请求响应都不用再加载,常驻内存后响应要快点。)
<?php #首先建立一个MyClass目录,在该目录下新MyClass.php文件,代码如下。 namespace MyClass; class MyClass { public function getNamespace() { return get_class($this); } }
<?php #在跟MyClass目录同级的目录下,新建一个文件,内容如下 function autoload($name) { $class_path = str_replace('\\',DIRECTORY_SEPARATOR,$name); //把表示命名空间的分割符号,转换成表示目录结构的斜线 $file = realpath(DIR).'/'.$class_path.'.php'; if(file_exists($file)) { require_once($file); //引入文件 if(class_exists($name,false)) //带有命名空间的类名 { return true; } return false; } return false; } echo MyClass\MyClass::getNamespace(); //输出: MyClass\MyClass;
这样非常容易避免了,当一个项目非常大时,不停的require文件。
让我们再思考,有没有更工程化的解决方案?当然有,我们可以建立自己的 Autoload 类,在这个类里面自动加载不同的类(可以包含命名空间),需要引用其他类的文件,只需要显示写入这个 Autoload 类即可。
以上がオートロードクラス __autoload() の使用法の簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック








![Illustrator でのプラグインの読み込みエラー [修正]](https://img.php.cn/upload/article/000/465/014/170831522770626.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
Adobe Illustrator を起動すると、プラグインの読み込みエラーに関するメッセージが表示されますか?一部の Illustrator ユーザーは、アプリケーションを開いたときにこのエラーに遭遇しました。メッセージの後には、問題のあるプラグインのリストが続きます。このエラー メッセージは、インストールされているプラグインに問題があることを示していますが、Visual C++ DLL ファイルの破損や環境設定ファイルの破損など、他の理由によって発生する可能性もあります。このエラーが発生した場合は、この記事で問題を解決する方法を説明しますので、以下を読み続けてください。 Illustrator でのプラグインの読み込みエラー Adobe Illustrator を起動しようとしたときに「プラグインの読み込みエラー」エラー メッセージが表示された場合は、次の操作を行うことができます。 管理者として

Windows PC の Stremio で字幕が機能しませんか?一部の Stremio ユーザーは、ビデオに字幕が表示されないと報告しました。多くのユーザーが、「字幕の読み込みエラー」というエラー メッセージが表示されたと報告しています。このエラーとともに表示される完全なエラー メッセージは次のとおりです: 字幕の読み込み中にエラーが発生しました 字幕の読み込みに失敗しました: これは、使用しているプラグインまたはネットワークに問題がある可能性があります。エラー メッセージにあるように、インターネット接続がエラーの原因である可能性があります。したがって、ネットワーク接続を確認し、インターネットが適切に機能していることを確認してください。これとは別に、このエラーの背後には、競合する字幕アドオン、特定のビデオ コンテンツでサポートされていない字幕、古い Stremio アプリなど、他の理由が考えられます。のように

インターネットの発展に伴い、スクロール読み込みをサポートする必要がある Web ページが増えています。無限スクロール読み込みもその 1 つです。これにより、ページに新しいコンテンツを継続的に読み込むことができるため、ユーザーはよりスムーズに Web を閲覧できるようになります。この記事では、PHPを使って無限スクロールローディングを実装する方法を紹介します。 1. 無限スクロールローディングとは何ですか?無限スクロール読み込みは、スクロール バーに基づいて Web コンテンツを読み込む方法です。その原理は、ユーザーがページの一番下までスクロールすると、AJAX を通じてバックグラウンド データが非同期的に取得され、新しいコンテンツが継続的に読み込まれることです。このような積み込み方法

Outlook にハイパーリンクを挿入するときにフリーズの問題が発生した場合は、不安定なネットワーク接続、古い Outlook バージョン、ウイルス対策ソフトウェアによる干渉、またはアドインの競合が原因である可能性があります。これらの要因により、Outlook がハイパーリンク操作を適切に処理できない可能性があります。ハイパーリンクの挿入時に Outlook がフリーズする問題を修正する 次の修正プログラムを使用して、ハイパーリンクの挿入時に Outlook がフリーズする問題を修正します。 インストールされているアドインを確認する Outlook を更新する ウイルス対策ソフトウェアを一時的に無効にして、新しいユーザー プロファイルの作成を試行する Office アプリ プログラムを修正する Office をアンインストールして再インストールする 始めましょう。 1] インストールされているアドインを確認する Outlook にインストールされているアドインが問題の原因となっている可能性があります。

インターネットの発展に伴い、Web ページに写真は欠かせないものになりました。しかし、画像の数が増えると、画像の読み込み速度が非常に重要な問題になります。この問題を解決するために、多くの Web サイトではサムネイルを使用して画像を表示していますが、サムネイルを生成するには専門的な画像処理ツールを使用する必要があり、専門家以外の人にとっては非常に面倒です。その場合、JavaScript を使用してサムネイルの自動生成を実現するのが良い選択になります。 JavaSの使い方

Linux オペレーティング システムを使用していて、システムが起動時にドライブを自動的にマウントするようにしたい場合は、デバイスの一意の識別子 (UID) とマウント ポイントのパスを fstab 構成ファイルに追加することでこれを行うことができます。 fstab は、/etc ディレクトリにあるファイル システム テーブル ファイルで、システムの起動時にマウントする必要があるファイル システムに関する情報が含まれています。 fstab ファイルを編集すると、システムを起動するたびに必要なドライブが正しくロードされるようになり、システムの安定した動作が保証されます。ドライバーの自動マウントはさまざまな場面で便利に使えます。たとえば、システムを外部ストレージ デバイスにバックアップする予定です。自動化を実現するには、起動時であってもデバイスがシステムに接続されたままであることを確認してください。同様に、多くのアプリケーションは直接

CSS を読み込めない問題の解決策には、ファイル パスの確認、ファイルの内容の確認、ブラウザのキャッシュのクリア、サーバー設定の確認、開発者ツールの使用、ネットワーク接続の確認などが含まれます。詳細な紹介: 1. ファイル パスを確認します。まず、CSS ファイルのパスが正しいことを確認してください。CSS ファイルが Web サイトの別の部分またはサブディレクトリにある場合は、正しいパスを指定する必要があります。 CSS ファイルはルート ディレクトリにあり、パスは直接である必要があります。 ; 2. ファイルの内容を確認します。パスが正しい場合は、CSS ファイル自体に問題がある可能性があります。CSS ファイルを開いて確認してください。

はじめに: vim は強力なテキスト編集ツールであり、Linux で非常に人気があります。最近、別のサーバーで vim を使用しているときに、奇妙な問題が発生しました。ローカルで作成したスクリプトをコピーしてサーバー上の空のファイルに貼り付けると、自動インデントが発生しました。簡単な例を使用すると、ローカルで作成したスクリプトは次のとおりです: aaabbbcccddd。上記の内容をコピーしてサーバーの空のファイルに貼り付けると、取得されるものは次のとおりです: aabbbcccddd。明らかに、これは vim が自動的に行うことです。インデントをフォーマットします。ただし、このオートマチックは少し知性がありません。解決策をここに記録します。解決策: ホーム ディレクトリに .vimrc 構成ファイルを設定します。
