<?php class Example { // Hold an instance of the class private static $instance; // A private constructor; prevents direct creation of object private function __construct() { echo 'I am constructed'; } // The singleton method public static function singleton() { if (!isset(self::$instance)) { $c = __CLASS__; self::$instance = new $c; } return self::$instance; } // Example method public function bark() { echo 'Woof!'; } // Prevent users to clone the instance public function __clone() { trigger_error('Clone is not allowed.', E_USER_ERROR); } }
你还可以实现php5里面的iteratoraggregate接口对象来定义自己的迭代方法。 魔术函数: The function names __construct, __destruct (see Constructors and Destructors), __call, __get, __set, __isset, __unset (see Overloading), __sleep, __wakeup, __toString, __clone and __autoload are magical in PHP classes. 这些函数在存在于每一个php类中。你不要随意使用__来定义函数,除非你真的想这个函数具有魔术功能。 __tostring()函数,这个函数将决定一个对象转换为字符的时候将发生的事。 final关键字: final关键字用来阻止应用final关键字声明的类或者方法被继承,被覆盖。 参数类型强制: 可以在参数前面加上类名类控制传入的参数类型。 require() 和 include() 除了怎样处理失败之外在各方面都完全一样。 include() 产生一个警告而 require() 则导致一个致命错误。 换句话说,如果想在丢失文件时停止处理页面,那就别犹豫了,用 require() 吧。 require_once() 语句在脚本执行期间包含并运行指定文件。 此行为和 require() 语句类似, 唯一区别是如果该文件中的代码已经被包含了, 则不会再次包含。有关此语句怎样工作参见 require() 的文档。 PHP 有一个类型运算符:instanceof。instanceof 用来测定一个给定的对象是否来自指定的对象类。 代码范例: