ホームページ > バックエンド開発 > PHPチュートリアル > PHPクラスのマジックメソッドとクラスの自動ロード

PHPクラスのマジックメソッドとクラスの自動ロード

WBOY
リリース: 2016-07-25 09:03:52
オリジナル
952 人が閲覧しました
  1. class Connection {
  2. protected $link;
  3. private $server, $username, $password, $db;
  4. public function __construct($server, $username, $password, $db) {
  5. $this- >server = $server;
  6. $this->username = $username;
  7. $this->gt;password = $password;
  8. $this->db = $db;
  9. $this->connect();
  10. }
  11. プライベート関数 connect() {
  12. $this->link = mysql_connect($this->サーバー, $this->ユーザー名, $this->パスワード);
  13. mysql_select_db($this-> db, $this->link);
  14. }
  15. public function __sleep() {//シリアル化するときにこれらの属性の値を保存するだけです
  16. return array('server', 'username', 'password', ' db ');//配列を返さなければなりません
  17. }
  18. public function __wakeup() { //オブジェクトを逆シリアル化した後すぐにデータベースに接続します
  19. $this->connect();
  20. }
  21. }
コードをコピー

__toString(): オブジェクトを文字列として使用しようとするときに呼び出され、js オブジェクトの toString() と同様の文字列を返します

__invoke(): オブジェクトが関数として呼び出されるときに呼び出されます。のように $object($a,$b) は $object->__invoke($a,$b) を呼び出します

__set_state(): var_export() がオブジェクトに対して呼び出されると、その戻り値が出力されます

__クローン(): このメソッドは、オブジェクトに対してクローン操作を使用するときに呼び出され、戻り値はありません。このメソッドは、クローンによって取得されたオブジェクトが異なるプロパティ値を持つことができるように、クローンによって取得されたオブジェクトを返す前にそのプロパティを変更するために使用できます。ただし、オブジェクトの複製操作を防ぐために null または false を返して返すことはできません。複製操作によって取得されたオブジェクトは、このメソッドの戻り値を通じて返されません。

メモ: __get メソッドと __set メソッドは、オブジェクトのプライベート属性と保護された属性へのアクセスを柔軟に処理するためによく使用されます。 PHP オブジェクトがメソッドを決定するために isset() または empty() を使用する場合、そのメソッドはアクセス可能な属性とはみなされないためです (JavaScript を書きすぎる場合は注意してください。PHP では、属性は属性であり、メソッドはメソッドです。混同することはできません) __get を使用する場合、特にプライベート属性を扱う必要がある場合、このメソッドで属性を判断するために isset($this->key) を使用することがあります。このとき、__set() が定義されているかどうか、およびその方法に注意する必要があります。誤った判断を避けるために。 オブジェクトのメソッドの呼び出し時にパラメーターを渡す必要がない場合、または渡すパラメーターが固定されている場合は、 __get() メソッドを通じてメソッドに属性を付け、 __get() でメソッドを自動的に呼び出して値を返すことができます。

たとえば、クラス内で次のように __get メソッドを定義します。

  1. public function __get($key){

  2. if(property_exists($this,$key)){
  3. return $this->$key; //プライベートおよび保護されたプロパティはアクセスを許可します。
  4. }else if(method_exists($this,'get'.$key)){
  5. return $this->{'get'.$key}();
  6. //or....
  7. // $methodName = 'get'.$key;
  8. //return $this-> $methodName();
  9. }else{
  10. throw new Exception('class '.__class__.' do not have property '.$key);
  11. }
  12. }

  13. //メソッド属性アクセス:

  14. $obj->getModelName(); //Attributed

;
unserialize() メソッド: オブジェクトを逆シリアル化しようとするとき、この関数は、シリアル化文字列が他の方法で取得され、オブジェクトのクラスがスクリプト環境で定義されていない場合、そのオブジェクトのクラスを知る必要があります。必須 クラスのファイルをインポートします。 unserialize() の 2 番目のパラメーターは、クラスが存在するファイルをインポートするために使用されるオプションのコールバック パラメーターです。 関数 importClass($calssName){ include('xxxx.php'); //このクラスを含むファイル } unserialize($objstr,$callbackName);
クラスの自動ロード: __autoload()

__autoload() は、特定のクラスのメソッドではなく、PHP 実行環境で合意された関数です。クラスが使用前に現在のファイルにロードされていない場合、通常、クラスをロードするために __autoload() 関数が自動的に呼び出されます。これらのクラスのロード規則はすべて合意されています。たとえば、これらのクラスはクラス名にちなんで名付けられたファイルに含まれています。この方法により、クラスのオンデマンドロードが実現され、スクリプトの実行前に不要なクラスをロードすることがなくなり、リソースの使用量と送信が削減されます。パフォーマンス。

注: __autoload() 内のエラーは try-catch では捕捉できません。

function __autoload($class_name){
    require_once(PATH.'/calsses/'.$class_name.'.php');
  1. }
  2. $obj1 = new mycalss1();
  3. コードをコピー

__autoload() によって自動的に呼び出される関数を登録します。 PHP5.0 以降、spl コードベースはデフォルトで自動的に有効になります。 spl_autoload_register([callback]); //__autoload() に特定の読み込みコードを記述する代わりに、この関数を使用してコールバック関数を登録できます。

クラスメソッドをコールバック関数として使用する場合は、配列を渡す必要があります。 spl_autoload_register(array('class_name'|$obj,'method_name'));

例: spl_autoload_register(array($this,'autoloadClass')); spl_autoload_register(array('YiiBase','autoload'));//YII フレームワークのオートロード クラスの実装。YiiBase クラスはオートロード メソッドを実装します。 spl_autoload_register() は複数のロード関数を登録でき、クラス ファイルが正常にロードされる前に、登録されているすべてのロード関数が 1 つずつ試行されます。これは、異なるクラスが異なるロジックを使用してクラス ファイルをインポートする場合に便利です。 spl_autoload_unregister(); //登録されたロード関数をキャンセルします。パラメータは spl_autoload_register() と同じです。 spl_autoload_functions(); // 登録されているすべての __autoload() 関数を配列で返します

spl_autoload(class_name[,file_extensions]); //__autoload() 関数のデフォルトの実装。 spl_autoload_register() の呼び出し時に関数名が渡されなかった場合、この関数の実行規則は次のとおりです。クラス名はファイル名として小文字に変換され、渡された file_extensions (複数) が使用されます。拡張子はカンマで区切られており、拡張子はデフォルト (.inc および .php) です。取得したファイル名に基づいて、php.ini に設定されているインクルード パスを検索してみてください。

spl_autoload_call(class_name);//登録されているすべての __autoload() 関数を手動で呼び出してクラス ファイルをアクティブにロードします spl_autoload_extensions([file_extentions]); // spl_autoload() で使用できるファイル拡張子を登録または返します。拡張子は .a.b の形式になります。 spl_autoload_extentions(".class.php"); spl_autoload_register(); // spl_autoload() を使用してクラス ファイルの自動ロードを試みます //このように spl_autoload('myclassName'); はファイル "myclassName.class.php" をロードしようとします .



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