前两章是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  

对象与设计

内聚: 是一个模块内部各成分之间相关联程度的度量。

耦合:紧密相连,依赖太重

深入php面向对象和模式的更多相关文章

  1. JavaScript---正则使用,日期Date的使用,Math的使用,JS面向对象(工厂模式,元模型创建对象,Object添加方法)

    JavaScript---正则使用,日期Date的使用,Math的使用,JS面向对象(工厂模式,元模型创建对象,Object添加方法) 一丶正则的用法 创建正则对象: 方式一: var reg=new ...

  2. 面向对象架构模式之:领域模型(Domain Model)

    一:面向对象设计中最简单的部分与最难的部分 如果说事务脚本是 面向过程 的,那么领域模型就是 面向对象 的.面向对象的一个很重要的点就是:“把事情交给最适合的类去做”,即:“你得在一个个领域类之间跳转 ...

  3. 【JavaScript】 JS面向对象的模式与实践 (重点整治原型这个熊孩子 (/= _ =)/~┴┴ )

    参考书籍 <JavaScript高级语言程序设计>—— Nicholas C.Zakas <你不知道的JavaScript>  —— KYLE SIMPSON   在JS的面向 ...

  4. 读《深入PHP 面向对象、模式与实践》笔记

    1. include() 和require() 语句的不同在于它们如何处理错误.使用require()调用文件发生错误时,将会停止整个程序;调用include()时遇到相同的错误,则会生成警告并停止执 ...

  5. 读《深入php面向对象、模式与实践》有感(三)

    命令模式: 第一次接触到这个命令模式的时候,感觉它很像一个简化的mvc框架.从不同的路径访问,再由控制器来判断所要调用的具体php文件. <?php class CommandContext{ ...

  6. 读《深入php面向对象、模式与实践》有感(二)

    书中关于设计模式的介绍很详细. 一.单例模式 作者建了一个preferences类来解释什么是单例模式.这个preferences类并非我第一次见到,在android中也有这个类,不过以前都是只管用即 ...

  7. 面向对象DAO模式

    DAO模式编写数据访问层代码步骤? 1.  接口 增.删.改.查的方法 方法的返回类型为泛型集合 Int rows=select语句的条数 If(rows>0) 方法的返回类型为泛型集合 If( ...

  8. 《深入PHP:面向对象、模式与实践》(一)

    第1章  PHP:设计与管理 本章主要介绍了本书有哪些内容. 第2章  PHP与对象 本章总结了PHP面向对象特性的发展过程,逐步介绍对象的概念. PHP/FI:支持变量.关联数组和函数.没有对象. ...

  9. 读《深入php面向对象、模式与实践》有感(一)

    什么样的代码需要改进?书中给出了四个标准(我个人比较认可这四个标准,实际开发中也的确时常遇到): 一.代码重复 用书中的原话讲:“如果你在写代码的时候,总是感觉似曾相识,很可能你的代码已经重复了”. ...

随机推荐

  1. Php 魔术常量

    魔术常量 由于其值在程序运行过程中不允许更改,所以是常量:其值,又是运行环境不同而不现,所以叫魔术. __DIR__            当前脚本文件的路径 示例: __LINE__         ...

  2. 一些常用sqlite语句

    1,如果表不存在就新建一个 CComBSTR bstrCreatBat(L”CREATE TABLE IF NOT EXISTS tb_Name (\ rowIdIndex  INTEGER PRIM ...

  3. Java Calendar类简单用法

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3832307.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  4. Mysql 作业(Scheduler)

    200 ? "200px" : this.width)!important;} --> 介绍 作业也叫做事件调度,其实它也就是一个时间触发器:它可以定义某个时间点执行指定的数 ...

  5. ubuntu 12.04 clang 3.4 安装

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4137402.html 1.添加clang源 deb http://llvm.org/apt/ ...

  6. Android TextUtil

    Android中计算textView长度问题 今天有一个需求,需要TextView显示两行的信息,但是右下角区域需要空出来,要来显示一张小图片,要实现的效果如图所示. 这里遇到的问题是计算TextVi ...

  7. Java中的分代垃圾回收策略

    一.分代GC的理论基础 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大 ...

  8. rsync命令(同步/备份数据)

    rsync命令rsync命令是一个远程数据同步工具,可通过 lam/wan快速同步多台主机间的文件.rsync使用所谓的 "rsync算法"来使用本地和远程两个主机之间的文件达到同 ...

  9. Unity学习笔记(1):认识Unity

    Unity是什么? Unity是patterns & practices团队开发的一个轻量级.可扩展的依赖注入容器,具有如下的特性: 它提供了创建(或者装配)对象实例的机制,而这些对象实例可能 ...

  10. OPM与ILE编程模式的区别

    OPM与ILE编程模式的区别 OPM是传统编程模式,即一个可执行的程序只用一种语言编程:一个可执行程序只有一段程序代码组成:程序之间的调用关系是动态的调用关系. ILE是多语言开发集成编程模式,即一个 ...