深入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
对象与设计
内聚: 是一个模块内部各成分之间相关联程度的度量。
耦合:紧密相连,依赖太重
深入php面向对象和模式的更多相关文章
- JavaScript---正则使用,日期Date的使用,Math的使用,JS面向对象(工厂模式,元模型创建对象,Object添加方法)
JavaScript---正则使用,日期Date的使用,Math的使用,JS面向对象(工厂模式,元模型创建对象,Object添加方法) 一丶正则的用法 创建正则对象: 方式一: var reg=new ...
- 面向对象架构模式之:领域模型(Domain Model)
一:面向对象设计中最简单的部分与最难的部分 如果说事务脚本是 面向过程 的,那么领域模型就是 面向对象 的.面向对象的一个很重要的点就是:“把事情交给最适合的类去做”,即:“你得在一个个领域类之间跳转 ...
- 【JavaScript】 JS面向对象的模式与实践 (重点整治原型这个熊孩子 (/= _ =)/~┴┴ )
参考书籍 <JavaScript高级语言程序设计>—— Nicholas C.Zakas <你不知道的JavaScript> —— KYLE SIMPSON 在JS的面向 ...
- 读《深入PHP 面向对象、模式与实践》笔记
1. include() 和require() 语句的不同在于它们如何处理错误.使用require()调用文件发生错误时,将会停止整个程序;调用include()时遇到相同的错误,则会生成警告并停止执 ...
- 读《深入php面向对象、模式与实践》有感(三)
命令模式: 第一次接触到这个命令模式的时候,感觉它很像一个简化的mvc框架.从不同的路径访问,再由控制器来判断所要调用的具体php文件. <?php class CommandContext{ ...
- 读《深入php面向对象、模式与实践》有感(二)
书中关于设计模式的介绍很详细. 一.单例模式 作者建了一个preferences类来解释什么是单例模式.这个preferences类并非我第一次见到,在android中也有这个类,不过以前都是只管用即 ...
- 面向对象DAO模式
DAO模式编写数据访问层代码步骤? 1. 接口 增.删.改.查的方法 方法的返回类型为泛型集合 Int rows=select语句的条数 If(rows>0) 方法的返回类型为泛型集合 If( ...
- 《深入PHP:面向对象、模式与实践》(一)
第1章 PHP:设计与管理 本章主要介绍了本书有哪些内容. 第2章 PHP与对象 本章总结了PHP面向对象特性的发展过程,逐步介绍对象的概念. PHP/FI:支持变量.关联数组和函数.没有对象. ...
- 读《深入php面向对象、模式与实践》有感(一)
什么样的代码需要改进?书中给出了四个标准(我个人比较认可这四个标准,实际开发中也的确时常遇到): 一.代码重复 用书中的原话讲:“如果你在写代码的时候,总是感觉似曾相识,很可能你的代码已经重复了”. ...
随机推荐
- Apache 使用密码文件验证用户
使用文本文件作为密码文件 创建密码文件 需要使用htpasswd.exe文件来创建用户密码文件 语法: htpasswd -c '文件完整路径' 用户名 向一个用户密码文件中添加一个新用户 语法: h ...
- WSAEventSelect模型详解
WSAEventSelect 是 WinSock 提供的一种异步事件通知I/O模型,与 WSAAsyncSelect模型有些类似. 该模型同样是接收 FD_XXX 之类的网络事件,但是是通 ...
- Web前端的35个jQuery小技巧
1. 禁止右键点击 $(document).ready(function(){ $(document).bind("contextmenu",function(e){ ...
- Cassandra1.2文档学习(11)—— 删除数据
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...
- 1 server - n clients 模型实现(select)
拓扑结构: 各个客户端创建读写管道,通过“上下线信息管道”向服务器发送上下线信息和读写管道名称.服务器接受信息,修改链表(存储客户端信息).客户端.服务器打开读写管道,服务器通过“W”管道接收从客户端 ...
- 2014年辛星完全解读Javascript第七节 数组和对象
由于Javascript是脚本语言,因此,使用起来非常方便,数组的使用也是比较简单的,下面我们就主要介绍一下Javascript中数组的介绍,以及上一节中没有完成的对象的介绍. *********** ...
- 【iOS】init,loadView,viewDidLoad加载关系
一.loadView 永远不要主动调用这个函数.view controller会在view的property被请求并且当前view值为nil时调用这个函数.如果你手动创建view,你应该重载这个函数. ...
- WebUploader API
Uploader new Uploader( opts ) ⇒ Uploader 上传入口类. var uploader = WebUploader.Uploader({ swf: 'path_of_ ...
- (转)inux Read系统调用
转载网址:http://my.oschina.net/haomcu/blog/468656 1. 什么是系统调用 2. read系统调用在内核空间的处理层次模型 3. 相关的内核数据结构 4. rea ...
- 关于WinForm引用WPF窗体
项目中有个界面展示用WPF实现起来比较简单,并且能提供更酷炫的效果,但是在WinForm中使用WPF窗体出现了问题,在网上找了一下有些人说Winform不能引用WPF的窗体,我就很纳闷,Win32都能 ...