PHP5-OOP变革,类与对象(一)----变革概述
PHP5 三大特点。
l 新的对象模式 (New Object Mode)
Ø 构造函数和析构函数
Ø 对象的引用
Ø 对象的克隆
Ø 对象中的私有、公共及受保护模式
Ø 接口 (Interfaces)
Ø 抽象类
Ø __call
Ø __set 和 __get
Ø 静态成员
l 异常处理 (Exceptions)
Ø 可以使用 try 及 catch 进行异常的处理且新增 Exception 类,用户可以继承该类来自定义异常内容。
l 名称空间 (Namespace)
Ø 名称空间对类的分组或函数分组很有用。它可以把一些相关的类或函数给组合到一起,方便以后调用。
注意你需要在何种情况下使用名称空间,在实际运用中,你可能会需要声明两个或多个名称一样的对象来做不同的事情,那么你就可以把他们分别放到不同的名称空间中去(但接口是要相同的)。
资料参考:http://www.phppro.jp/phpmanual/php/language.oop5.html
PHP5-OOP变革,类与对象(二)---自动引用类文件(__autoload)与构造函数(__construct)
1, 自动引用类文件。对于PHP的类来说,每次定义一个类都需要之前使用引用(require)之类的语句进行操作,无遗为PHP类的使用又增加了一个注意点。而对于PHP5来说可以在文件中使用“__autoload($class_name)”来自动对所要的类进行加载(引用)了。
下面的例子,说明了__autoload是如何使用的. 它假设当前目录下每个文件对应一个类. 当脚本尝试来产生一个类MyClass1的实例,PHP会执行__autoload. 脚本假设MyClass1.php中定义有MyClass1类,若用户在定义MyClass2时,__autoload也会去特定路径下加载MyClass2.php文件。function __autoload($class_name) { include_once'../cls/'.$class_name . '.php';}$obj = new MyClass1();$obj2 = new MyClass2();?>说明:关于autoload的具体使用请参见之后写的"PHP5—OOP,__autoload(类文件自动加载规则)的定义方法及分析(自创)"一文。需要自定义自动加载类的路径,另外,对于动态加载类方法,可以使用“__call()”来动态的增加对象的方法
2,构造函数,在PHP5中可以使用统一的类构造函数名。“__construct()”(从VC++中学到的)。这样做的好处是,若类名改变,不需要再改变其构造函数名称,如下示例:
void __construct ( [mixed args [, ...]] )
说明:当父类中没有构造函数而子类有,默认处理即可,但当父类中有构造函数,子类在调用自身构造函数的同时调用父是必要的(即,PHP还不会将构造传递下去),parent::__construct();class BaseClass { function __construct() { print "In BaseClass constructor\n"; }}class SubClass extends BaseClass {__construct function () { parent::__construct(); print "In SubClass constructor\n"; }}$obj = new BaseClass();$obj = new SubClass();?>说明:在类中使用“__destruct()”可以释放删除该类,对于父类子类是否有,与构造时的处理相同。Parent::__destruct();
PHP5-OOP变革,类与对象(三)---OO中的访问权限关键字(public,private,protected)
3, PHP的OOP的访问权限。
在PHP5中,对于类变量的访问权限主要是通过以下关键字进行定义的:
public----公共变量,方法(在哪里都可以被访问且改变)
private----私有变量,方法(只能在类中定义或类中改变时访问且改变)
protected----受保护的变量,方法(不能被所继承的类所复写的变量或方法,即受保护不能由其继承的类改变。)
说明:在PHP4,5中没有加关键字的变量,方法,全都为public(公共变量)。/*** MyClass の定義*/class MyClass{ public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private';printHello function () { echo $this->public; echo $this->protected; echo $this->private; }}$obj = new MyClass();echo $obj->public; // 動作しますecho $obj->protected; // Fatal エラーecho $obj->private; // Fatal エラー$obj->printHello(); // Public、Protected そして Private を表示します/*** MyClass2 の定義*/class MyClass2 extends MyClass{ // public および protected メソッドは再定義できますが、 // private はできません。 protected $protected = 'Protected2';printHello function () { echo $this->public; echo $this->protected; echo $this->private; }}$obj2 = new MyClass2();echo $obj->public; // 動作しますecho $obj2->private; // 未定義ですecho $obj2->protected; // Fatal エラー$obj2->printHello(); // Public、Protected2 を表示しますが Private は表示しません?>/*** MyClass の定義*/class MyClass{ // コンストラクタは public でなければなりません__construct public function () { } // public メソッドの宣言MyPublic public function () { } // protected メソッドの宣言MyProtected protected function () { } // private メソッドの宣言MyPrivate private function () { } // これは public となりますFoo function () { $this->MyPublic(); $this->MyProtected(); $this->
本文探讨了PHP5中面向对象编程的重大改进,包括新对象模式特性如构造函数、析构函数、对象引用等;异常处理机制;以及名称空间概念。文章通过示例介绍了自动加载类文件与构造函数的使用,并详细解释了公共、私有和受保护的访问权限关键字。
2207

被折叠的 条评论
为什么被折叠?



