PHPクラスとオブジェクト完全な分析 (1)
PHP クラスとオブジェクトの完全な分析 (2)
PHP クラスとオブジェクトの完全な分析 (3)
カプセル化: オブジェクトの
をクラス (論理ユニット) に編成します ) 継承:コードの再利用を目的として、元のクラスに基づいて新しいクラスを作成します。 多態性: サブクラス型のポインターを親クラス型のポインターに割り当てることができます。
------------------------------------------------
2. オブジェクトを自動的にロードする:
[php] view plaincopyprint? function autoload($class){ require_once("classes/$class.class.php"); }
なぜ autoload を使用する必要があるのか
1. 1 つ目は、このクラス ファイルがどこに保存されているかがわからないということです
2. このファイルをいつ使用する必要があるかがわからないということです。3. 特にプロジェクト ファイルの数が多い場合、各ファイルの先頭に要件の長いリストを記述することは不可能です...
1 つを置き換えました
require_once ("classes/Employees.class.php") ;
require_once ("classes/Patrons.class.php") ;
zend が最も推奨したもの一般的な方法では、ファイル名にパスを含めます。たとえば、次の例:
[php] view plaincopyprint? view sourceprint? // Main.class function autoload($class_name) { $path = str_replace('_', DIRECTORY_SEPARATOR, $class_name); require_once $path.'.php'; }
すべてのクラス ファイルを 1 つまたは複数の特定のフォルダーに配置し、トラバーサルを通じてそれらを検索してロードします。
例:<?php $arr = array ( 'Project/Classes', 'Project/Classes/Children', 'Project/Interfaces' ); foreach($arr as $dir) { $dir_list = opendir($dir); while ($file = readdir($dir_list)) { $path = $dir.DIRECTORY_SEPARATOR.$file; if(in_array($file, array('.', '..')) || is_dir($path)) continue; if (strpos($file, ".class.php")) require_once $path; } } ?>
view sourceprint? // configuration.php array_of_associations = array( 'MainSuperClass' = 'C:/Main/Super/Class.php', 'MainPoorClass' = 'C:/blablabla/gy.php' );
<?php require 'autoload_generated.php'; function autoload($className) { global $autoload_list; require_once $autoload_list[$className]; } $x = new A(); ?>
3. コンストラクターとデストラクターPHP
オブジェクトを作成する
ごとに 1 回だけ呼び出されます。このメソッドはアクティブに呼び出すことができないため、そのため、通常はいくつかの有用な初期化タスクを実行するために使用されます。これメソッドには戻り値がありません。)関数: オブジェクトの作成時にオブジェクトを初期化するために使用されます
コンストラクターparent::construct().
デストラクター: destruct ()定義: 特別な内部メンバー関数には戻り値の型もパラメーターもありません。任意に呼び出すことはできず、オーバーロードもされません。クラス オブジェクトの寿命が終了した場合にのみ、システムが自動的に呼び出して、コンストラクターに割り当てられたリソースを解放します。
デストラクターはパラメーターを取ることができず、その名前は destruct() でなければなりません。
機能: 後処理をクリーンアップします。たとえば、オブジェクトの作成時に new を使用してメモリ空間を開き、終了する前にコンストラクターに割り当てられたリソースをデストラクターを使用して解放します。
例:
class Person { public $name; public $age; //定义一个构造方法初始化赋值 public function construct($name,$age) { $this->name=$name; $this->age=$age; } public function say() { echo "my name is :".$this->name."<br />"; echo "my age is :".$this->age; } //析构函数 function destruct() { echo "goodbye :".$this->name; } } $p1=new Person("ren", 25); $p1->say();
4.
アクセス制御クラスメンバーのアクセス制御
クラスメンバーは、キーワードpublic、protected、またはprivateを使用して定義する必要があります。
メソッドのアクセス制御
クラス内のメソッドは、キーワードpublic、protected、またはprivateを使用して定義する必要があります。これらのキーワードが設定されていない場合、メソッドはデフォルトの public に設定されます。
class MyClass { public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj = new MyClass(); echo $obj->public; // 这行能被正常执行 echo $obj->protected; // 这行会产生一个致命错误 echo $obj->private; // 这行也会产生一个致命错误 $obj->printHello(); // 输出 Public、Protected 和 Private
-------------------------------------------------------------
继承定义:以原有的类为基础,创建一个新类,从而代码复用的目的;
--------------------------------------
覆写是对象继承时用到的
重载是单对象中同方法名不同参数的方法
--------------------------------------
继承已为大家所熟知的一个程序设计特性,PHP 的对象模型也使用了继承。继承将会影响到类与类,对象与对象之间的关系。
比如,当扩展一个类,子类就会继承父类的所有公有和保护方法。但是子类的方法会覆盖父类的方法。
继承对于功能的设计和抽象是非常有用的,而且对于类似的对象增加新功能就无须重新再写这些公用的功能。
class Person { public $name; public $age; function say() { echo "my name is:".$this->name."<br />"; echo "my age is:".$this->age; } } // 类的继承 class Student extends Person { var $school; //学生所在学校的属性 function study() { echo "my name is:".$this->name."<br />"; echo "my shool is:".$this->school; } } $t1 = new Student(); $t1->name = "zhangsan"; $t1->school = "beijindaxue"; $t1->study();
------- --------- ------ --------- -------- -----
范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员、方法和常量,还可以用于覆盖类中的成员和方法。
当在类的外部访问这些静态成员、方法和常量时,必须使用类的名字。
self 和 parent 这两个特殊的关键字是用于在类的内部对成员或方法进行访问的。
注意:
当一个子类覆盖其父类中的方法时,PHP 不会再执行父类中已被覆盖的方法,直到子类中调用这些方法为止
例子:
<?php class OtherClass extends MyClass { public static $my_static = 'static var'; public static function doubleColon() { echo parent::CONST_VALUE . "\n"; echo self::$my_static . "\n"; } } OtherClass::doubleColon(); ?>
以上がPHP のクラスとオブジェクトについての包括的な理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。