php5学習記録(1)
1.php5の主な新機能
1.public /private/protected アクセス修飾子。オブジェクトのメソッドとプロパティ用。
汎用のオブジェクト指向アクセス修飾子を使用して、メソッドとプロパティのアクセス レベルを制御できます。
クラス MyClass {
private $id = 18; public function getId() { return $this->id; } }
2. コンストラクター名を統一 __construct().
コンストラクターがクラスと同じ名前を持つことを避けるために、コンストラクターは __construct() で宣言されるようになり、クラス階層内でクラスを転送しやすくなりました。
?
class MyClass { function __construct() { print 'Inside constructor'; } }
?
? 3. __destructor() を通じてオブジェクトのデストラクター メソッドを定義します。
オブジェクトの登録を解除するデストラクターの定義を許可します:
?
class MyClass { function __destruct() { print ' Destroying object'; } }
?
? 4. インターフェース。
インターフェイスを使用するクラスは、複数の関連インターフェイスをロードできます。クラスは別のクラスからのみ継承できますが、任意の数のインターフェイスを実装できます:
?
interface Display { function display(); } class Circle implements Display { function dispaly() { print ' Dispalying circle \n'; } }
?
? 5. 演算子のインスタンス。
instanceof は、指定されたオブジェクトが特定のクラス、特定のクラスのサブクラス、またはインターフェイスに属している (継承している) かどうかを検出するために使用されます。存在する場合は true を返します。
?
if ($obj instanceof Circle) { print '$obj is a Circle'; }
?
?
6.最終採点方法。
Final キーワードを使用すると、サブクラスによってオーバーロードされないようにメソッドを識別できます。
?
class MyClass { final function getBaseClassName() { return __CLASS__; } }
?
7.最終マークの授業。
クラスをfinalとして宣言した後は、そのクラスを継承することはできません。次の例ではエラーが報告されます。
?
final class FinalClass { } class BogusClass extends FinalClass { }
?
?
8. オブジェクトの強制コピー
オブジェクトのクローンを作成するには、clone キーワードを使用する必要があります。クラス内で __clone() メソッドを宣言できます。このメソッドはクローン作成プロセス中に呼び出されます (呼び出しは元のオブジェクトから属性とメソッドがコピーされた後に行われます)。
??
class MyClas { function __clone() { print 'Object is being cloned'; } } $obj = new MyClass(); $obj_copy = clone $obj;
9. クラスの定数。
定数がクラス定義に含まれるようになり、クラスを使用して参照できるようになりました:
?
class MyClass { const SUCCESS = "Success"; const FAILURE = "Failure"; } print MyClass::SUCCESS;
?
10. 静的メソッド。
静的メソッドを定義し、インスタンス化せずに使用できるようになりました。静的メソッドは特定のオブジェクトにバインドされていないため、$this 変数を使用できません:
クラス MyClass {
static function helloWorld() { print 'Hello world'; } } MyClass::helloWorld();
11. 静的メンバー。
クラス定義には、クラス自体を通じてアクセスできる静的メンバー (プロパティ) が含まれるようになりました。最も一般的に使用されるモードはシングルトン モードです:
?
class Singleton { static private $instance = NULL; private function __construct() { } static public function getInstance() { if (sell::$instance == NULL) { self::$instance = new Singleton(); } return self::$instance; } }
?
12. 抽象クラス。
クラスを抽象として宣言すると、クラスがインスタンス化されなくなります。ただし、抽象クラスを継承することはできます:
??
abstract class MyBaseClass { function dispaly() { print 'Default dispaly routine being called'; } }
13. 抽象メソッド。
継承されたサブクラスで定義できるように、メソッドを抽象として宣言します。抽象メソッドを含むクラスは、それ自体が抽象クラスである必要があります:
?
abstact class MyBaseClass { abstract function dispaly(); }
?
14. オブジェクトタイプのプロンプト。
関数宣言のパラメーターにオブジェクト型のヒントを提供できます。関数の呼び出し時に正しいオブジェクト タイプが渡されない場合、システムはエラーを報告します:
?
function expectsMyClass(MyClass $obj) { }
?
15. 連続参照メソッドによって返されるオブジェクトをサポートします。
PHP4 では、メソッドによって返されたオブジェクトを直接参照することはできません。まず中間変数に代入し、次にその変数を使用してそれを参照する必要があります。
php 4:
?
$dummy = $obj->method(); $dummy->method2();
?
php 5:
?
$obj->method()->method2();
?
16.
php5 では、php クラスと php 継承クラスでイテレーター インターフェイスを実装できます。反復インターフェイスを実装した後、foreach() 言語構造を使用してクラスのインスタンスを反復できます。
?
$obj = new MyIteratorImplementaion(); foreach ($obj as $value) { print $value; }
?
17.__autoload()方法。
__autoload()函数在你需要使用一个未定义的类的时候自动调用。通过调用这个函数,脚本的引擎在php抛出类未定义的错误之前提供最后一次加载类的机会:
?
function __autoload($class_name) { include_once($class_name . "php"); } $obj = new MyClass(); $obj2 = new MyClass2();
18.异常处理。
php5增加了著名的try/throw/catch架构的异常处理范例。使用时,你只能抛出从Exception类继承的对象:
class SQLException extends Exception {
public $problem; function __construct($problem) { $this->problem = $problem; } } try{ ... throw new SQLException("Couldn't connect to database"); ... } catch (SQLException $e) { print "SQLException"; } catch (Exception $e) { print 'Other Exception'; }
?
19.foreach 函数支持引用。
在php 4中,你不能遍历一个数组的同时更改它的值。但是php 5可以通过给foreach()循环的参数加速&(引用)符号,让你在遍历数组的循环中更改数组的值:
?
foreach ($array as &$value) { if ($value === "NULL") { $VALUE = NULL } }
?
? 20.给引用参数设置默认值。
在php 4中,你只能给传递值的参数设置默认值。php 5 现在可以让你给传递引用的参数设置默认值:
?
function my_func(&$arg = null) { if ($arg === NULL) { print '$arg is empty'; } } my_func();
?