前两章是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. .NET常用网络资源收藏

    .NET核心站点: Microsoft主页 https://www.microsoft.com ASP.NET主页 http://www.asp.net TechNet中文网 https://tech ...

  2. 使用DNSSCrypt解决DNS污染问题

    本文转自 月光博客,如有需要,请阅读原文. google近期在国内是不能访问了,dropbox这货居然也被DNS污染了,幸好发现DNSCrypt这一神器,防止DNS污染的绝佳工具. 基本原理:DNSC ...

  3. javascript-对象的函数(一)

    Date.prototype.Format = function(fmt) { //author: meizz var o = { "M+" : this.getMonth()+1 ...

  4. DEDECMS中,常见全局变量

    全局变量 {dede:global.cfg_cmspath/} 是dedecms 的安装目录,一般就是网站的根目录. {dede:global.cfg_cmsurl/}是当前目录 注意加一根斜线{de ...

  5. 真正的inotify+rsync实时同步 彻底告别同步慢

    真正的inotify+rsync实时同步 彻底告别同步慢       http://www.ttlsa.com/web/let-infotify-rsync-fast/     背景 我们公司在用in ...

  6. PHP利用微信跳转的Code参数获取用户的openid

    //获取微信登录用户信息function getOpenID($appid,$appsecret,$code){   $url="https://api.weixin.qq.com/sns/ ...

  7. vb6-很简单的配置密码验证提示

    '很简单的配置密码验证提示 Dim add As String add = Trim(InputBox("请输入配置密码", "报表配置")) If add = ...

  8. easy ui easyui-linkbutton 禁用、启用

    <a id="btn_update_Shop" name="btn_update_Shop" class="easyui-linkbutton& ...

  9. 【BZOJ 1053】[HAOI2007]反素数ant

    Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1 ...

  10. 分布式日志收集系统--Chukwa

    1. 安装部署 1.1 环境要求 1.使用的JDK的版本必须是1.6或者更高版本,本实例中使用的是JDK1.6 2.使用的hadoop的版本必须是Hadoop0.20.205.1及以上版本,本实例中使 ...