ホームページ >バックエンド開発 >PHPチュートリアル >Phalcon が自動的にロードされる (PHP が自動的にロードされる)、Phalcon がロードする php_PHP チュートリアル
include() または require() 関数を通じて、PHP プログラムが実行される前にファイルの内容をファイルに挿入できます。
リーリー* ファイルが存在しないか名前が変更された後はスクリプトの実行が続行されないため、include() の代わりに require() を使用することをお勧めします。
参考記事:PHPマニュアルとPHPのクラス自動読み込みの仕組み
PHP5 より前では、各 PHP フレームワーク実装クラスのロードには、一般に、合意された条件を満たすファイル クラスや関数を自動的にロードするために、一定の合意に従って トラバース ディレクトリ が必要でした。したがって、php5 より前のクラスの使用は現在ほど頻繁ではありませんでした。
php5以降、phpクラスをロードする際、クラスが配置されているフォルダーが含まれていなかったり、クラス名が間違っていたりすると、Zendエンジンは自動的に__autoload関数を呼び出します。 __autoload 関数はユーザーが実装する必要があります。
バージョンphp5.1.2以降ではspl_autoload_register関数を使用して読み込み処理関数をカスタマイズすることができます。この関数が呼び出されない場合、spl のカスタム spl_autoload 関数がデフォルトで使用されます。
リーリー
実際、__autoload
は少なくとも 3 つのこと (「 3 つのステップ」) を行う必要があることがわかります。
マッピング方法について合意する必要があります。この方法でのみ、クラス名に基づいて対応するファイルを見つけてロードを実装できます。
したがって、__autoload 自動ロードで最も重要なことは、クラス名とそれが配置されているファイルの対応を指定することです。含める必要のあるクラスが多数ある場合は、対応するルールを確立し、クラス名を対応するファイルにマッピングして、遅延読み込みを実現するだけです。 リーリー
2. PHP 自動ロード spl_autoload_register__自動ロードの欠点)
spl_autoload_register:リーリー
リーリー
機能説明Phalcon のデフォルトのファイルサフィックスは php ですが、もちろん自分で設定することもできます (setExtensions())。
1.クラス名を登録します
リーリー2. ネームスペースを登録する
リーリー名前空間または外部ライブラリを使用してコードを整理する場合、名前空間を登録して、そこに含まれるライブラリを自動的にロードできます。
リーリー3. 登録プレフィックス
名前空間と同様に、Phalcon は 2.1.0 以降プレフィックスをサポートしなくなります。
リーリー4.フォルダーを登録します
リーリー登録ディレクトリ内のクラスファイルを自動的にロードできます。ただし、Phalcon は各フォルダー内で同じクラス名を持つ多数のファイルを検索するため、この方法はパフォーマンスの観点からお勧めできません。登録ディレクトリを使用して自動的にロードする場合は、登録ディレクトリの関連性、つまり重要なディレクトリを前に置くことに注意してください。
<p>具体实现:</p>
即为当前自动加载数据添加额外的值。
<?<span>php </span><span>//</span><span> Adding more directories</span> <span>$loader</span>-><span>registerDirs( </span><span>array</span><span>( </span>"../app/library/", "../app/plugins/"<span> )</span>, <span>true</span><span> );</span>
注册时添加第二个参数值true,使其与原数组合并。
没有进行任何安全检查的自动加载器,如下:
<?<span>php </span><span>//</span><span>Basic autoloader</span> spl_autoload_register(<span>function</span>(<span>$className</span><span>) { </span><span>if</span> (<span>file_exists</span>(<span>$className</span> . '.php'<span>)) { </span><span>require</span> <span>$className</span> . '.php'<span>; } });</span>
假如我们没有进行任何安全检查时,如果误启了自动加载器,那么恶意准备的字符串就回作为参数访问程序中的重要文件。
<?<span>php </span><span>//</span><span>This variable is not filtered and comes from an insecure source</span> <span>$className</span> = '../processes/important-process'<span>; </span><span>//</span><span>Check if the class exists triggering the auto-loader</span> <span>if</span> (<span>class_exists</span>(<span>$className</span><span>)) { </span><span>//</span><span>...</span> }
Phalcon的做法是删除任何无用的字符串,减少被攻击的可能性。
在下面的例子中,而不必使用类加载器,使我们获得调试信息的流程操作:
<?<span>php </span><span>$eventsManager</span> = <span>new</span><span> \Phalcon\Events\Manager(); </span><span>$loader</span> = <span>new</span><span> \Phalcon\Loader(); </span><span>$loader</span>->registerNamespaces(<span>array</span><span>( </span>'Example\\Base' => 'vendor/example/base/', 'Example\\Adapter' => 'vendor/example/adapter/', 'Example' => 'vendor/example/'<span> )); </span><span>//</span><span>Listen all the loader events</span> <span>$eventsManager</span>->attach('loader', <span>function</span>(<span>$event</span>, <span>$loader</span><span>) { </span><span>if</span> (<span>$event</span>-><span>getType</span>() == 'beforeCheckPath'<span>) { </span><span>echo</span> <span>$loader</span>-><span>getCheckedPath(); } }); </span><span>$loader</span>->setEventsManager(<span>$eventsManager</span><span>); </span><span>$loader</span>->register();
Phalcon自动加载支持以下事件: