ホームページ  >  記事  >  バックエンド開発  >  PHP でのクラスのロードについて

PHP でのクラスのロードについて

autoload
autoloadオリジナル
2021-03-01 15:50:333115ブラウズ

オブジェクト指向は重要な考え方であり、オブジェクト指向ではクラスも重要な概念ですが、クラスを使用するにはクラスのロードが鍵となります。

クラスにアクセスするには 2 つの方法があります:

  • インスタンス化されたオブジェクトを介したアクセス

  • クラス メンバーへのアクセス

アクセスの前提条件はメモリ上にクラスが存在することなので、事前にクラスをメモリ上にロードしておく必要があります。

#1. 手動読み込み

//类文件 Salary.php
<?php
   class Salary{
      public  function Student(){
        echo "Salary下面的Student方法";
      }
   }
?>
应用文件:useSalary.php
<?php
//$s = new Salary();会报错,因为useSalaty.php中间未定义Salary类

include_once &#39;Salary.php&#39;;				//也可以使用require,通常使用_once,因为类不允许重名
$s = new Salary();
echo $s->Student();
?>
<?php
//加载类文件是一种比较消耗资源的方式,可以事先使用class_exists()函数来判定类是否存在,存在就不用加载,不存在才加载
if(!class_exists(&#39;Salary&#39;)){
	//不存在:加载
    include_once &#39;Salary.php&#39;;
}
//使用
$s = new Salary();
?>

#2. 自動読み込み

    PHP7 より前に使用されていた自動ロード機構: システムが提供する __autoload() 関数を使用します。その後、システムがクラスを使用する必要があるが、クラスがメモリに存在しない場合、システムは自動的に __autoload() 関数を呼び出してロードします。クラスファイル。
  • <?php
    function __autoload($classname){	//参数为类名:即当前需要访问的类的名字
    //需要人为定义去哪加载,怎么加载   
        include_once $classname . &#39;.php&#39;;	//假定为当前目录下,类文件名字为:类名.php
    }
    
    //使用类:内存目前并没有
    $s = new Salary();	//系统发现内存没有Salary,所以调用__autoload()去加载
    ?>
    //若在不同路径下
    <?php
    //定义自动加载
    function __autoload($classname){
        $abc_file = &#39;abc/&#39; . $classname . &#39;.php&#39;;		//如abc/Salary.php
        if(file_exists($c_file)){                      //利用file_exists()判断文件是否存在
            include_once $abc_file;
        }
    }
    ?>

    PHP7 以降では、__autoload() 関数を使用することは推奨されませんが、登録メカニズムを使用してユーザーをカスタマイズすることは推奨されません。この関数はシステム内に配置され、spl_autoload_register (定義された関数) を使用します。
  • <?php
    function myself_autoload($classname){		//与__autoload()类似
        $abc_file = &#39;abc/&#39; . $classname . &#39;.php&#39;;		//如abc/Salary.php
        if(file_exists($c_file)){
            include_once $c_file;
        }
    }
    //此时,上述函数永远不会自动运行,除非将函数注册到系统内部
    spl_autoload_register(&#39;myself_autoload&#39;);
    ?>
    //可以定义多个方法
    <?php
    function wayone_autoload($classname){		
       
    function waytwo_autoload($classname){		
        
    }
    //此时,上述函数永远不会自动运行,除非将函数注册到系统内部
    spl_autoload_register(&#39;wayone_autoload&#39;);
    spl_autoload_register(&#39;waytwo_autoload&#39;);
    ?>

  • 推奨:
php チュートリアル

以上がPHP でのクラスのロードについての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。