深入php面向对象和模式
前两章是php历史和概论,略过。
第三章 对象基础
3.1 类和对象
类,是用于生成对象的代码模版。
public 公有的,都可调用。 protected 保护的, 只有本类和子类可以调用。 private 私有的, 只有本类可以调用,子类也不能。
使用->来调用类的属性和方法: $product->title
构造方法:__construct() 会被自动调用。
继承: extends 子类继承父类会在实例化的时候自动调用所有public 和 protected方法。
要引用一个类而不是对象的方法,可以使用::而不是->, 所以 parent::__construct()
静态方法: static 以类作为作用域的函数。 class StaticExample { static public $num=0; static public function sayHello() { print "hello"; } } print StaticExample::$num; StaticExample::sayHello(); 要从当前类(不是子类)中访问静态方法或属性,可以使用self关键字 self::$num; 根据定义, 我们不能在对象中调用静态方法, 因此静态方法和属性又被称为类变量和属性。因此不能在静态方法中使用伪变量$this
常量属性: const 一般只能用大写字母来命名常量 const AVAILABLE = 0; 像静态属性一样, 只能通过类而不能通过类的实例访问常量属性。
抽象类: abstract 抽象类不能直接被实例化,抽象类中只定义(或部分定义)子类需要的方法。子类可以继承它并且通过实现其中的抽象方法,使抽象类具体化。 abstract public function write(); 抽象类的每个子类都必须实现抽象类中的所有抽象方法。
接口: interface 接口职能定义功能,而不包含实现的内容。 interface Chargeable { public function getPrice(); } 任何实现接口的类都要实现接口中所定义的所有方法。
抛出异常: 使用throw 和 Exception对象来抛出异常,这会停止执行当前方法。 if($i=0){ throw new Exception('this is a error message'); } 或 try{ ... } catch (Exception $e) { ... }
析构方法: 在对象被垃圾收集器收集前(即对象从内存中删除之前)自动调用。
__destruct()
__clone()复制对象 class CopyMe {} $first = new CopyMe(); $second = $first; //php4: $second和$first是两个完全不同的对象。 //php5: $second和$first指向同一个对象。 php中对象的赋值和传递都是通过引用进行的。
回调
一个简单的回调案例
function f1($arg1, $arg2) { echo __FUNCTION__.'exec, the args is:'.$arg1.' '.$arg2; echo "<br>"; } call_user_func('f1', 'han', 'wen'); call_user_func_array('f1', array('f1', array('han', 'wen')));
目前在我看来回调函数就是通过函数call_user_func和call_user_func_array来指定函数名和参数来调用函数,具体用途还不太清楚。
匿名函数和闭包Closure
$func = function() { }; //带结束符
$func = function( $param ) { echo $param; }; $func( 'some string' ); //输出: //some string
这篇文章不错http://www.cnblogs.com/melonblog/archive/2013/05/01/3052611.html
顺便发现一个强大函数preg_replace_callback
对象与设计
内聚: 是一个模块内部各成分之间相关联程度的度量。
耦合:紧密相连,依赖太重