ホームページ > バックエンド開発 > PHPチュートリアル > __autoload 中是不是一定需要 require_once?

__autoload 中是不是一定需要 require_once?

WBOY
リリース: 2016-06-06 20:33:12
オリジナル
956 人が閲覧しました

看到 __autoload 连官方手册都是 require_once,但是自己测试的时候,如果文件已经加载过了,是不会再执行加载的:

【index.php】

<code><?php function __autoload($className)
{
    echo 'autoload';
    require($className.'.php');
}

$obj = new sample();
$obj = new sample();
$obj = new sample();
$obj = new sample();
$obj = new sample();
</code></code>
ログイン後にコピー
ログイン後にコピー

【sample.php】

<code><?php class sample{}
</code></code>
ログイン後にコピー
ログイン後にコピー

index.php 和 sample.php 同目录,事实上最后只输出了一次 'autoload' 字符串。

那这么说来,是不是用 require 就可以了,何必用 once 造成不必要的性能浪费呢?

回复内容:

看到 __autoload 连官方手册都是 require_once,但是自己测试的时候,如果文件已经加载过了,是不会再执行加载的:

【index.php】

<code><?php function __autoload($className)
{
    echo 'autoload';
    require($className.'.php');
}

$obj = new sample();
$obj = new sample();
$obj = new sample();
$obj = new sample();
$obj = new sample();
</code></code>
ログイン後にコピー
ログイン後にコピー

【sample.php】

<code><?php class sample{}
</code></code>
ログイン後にコピー
ログイン後にコピー

index.php 和 sample.php 同目录,事实上最后只输出了一次 'autoload' 字符串。

那这么说来,是不是用 require 就可以了,何必用 once 造成不必要的性能浪费呢?

  1. 你应该能明白 __autoload 是什么时候触发的吧???
    在你第一次触发之后, 你成功的加载了 拥有这个class的php文件,
    那么 当你第二次new它的时候, 已经存在了这个class, 就不会再次触发 __autoload 了的.

  2. 官方没有规定说必须使用 require_once 吧? 那个只是例子吧.
    http://php.net/manual/zh/function.autoload.php

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート