PHP5权威编程阅读学习笔记 附电子书下载


Posted in PHP onJuly 05, 2012

PHP 5 权威编程(PHP 5 Power Programming) PDF下载地址 https://3water.com/books/28207.html 

PHP4中,不使用__construct()作为构造函数的名字,必须使用类的名字定义一个方法,就像在C++中一样。
PHP5中,使用新的统一的构造函数命名方式:__construct(),当然,使用类名同样也是可以的。
但是,你如果两个同时使用的话,系统默认会使用__construct()的形式。

<?php 
class Person{ 
//PHP4中的方法 
public function Person(){ 
echo "PHP4中的方法"; 
} 
//PHP5推荐使用的方法 
public function __construct(){ 
echo "PHP5推荐使用的方法"; 
} 
public function say(){ 
} 
} 
$p1=new Person(); 
?>

在构造函数中不能返回值,所以从构造函数内产生一个错误最常用的做法就是抛出一个异常。
代码如下:
<?php 
class Person{ 
private $_age; 
public function __construct($age){ 
try { 
if ($age<120){ 
$this->_age=$age; 
}else { 
throw new Exception("您输入的年龄过大"); 
} 
}catch (Exception $e){ 
echo $e->getMessage(); 
} 
} 
} 
$p1=new Person(121); 
?>

访问控制
对象属性的访问保护是OOP的一个关键范例
Public:可以在任何地方被访问
Protected:类成员可以被其所在类的子类和父类从对象内部的方法访问
Private:类成员只能被其所在类从对象内部的方法访问,而无法从继承类的成员中访问到。因为私用成员不会被继承,所以两个相关的类完全可以分别声明一个名字相同的私有变量。
也就是两个类都只能看到自己的私有属性,私有成员之间是没有关系的。
例子:
<?php 
/** 
* Define MyClass 
*/ 
class MyClass 
{ 
public $public = 'Public'; 
protected $protected = 'Protected'; 
private $private = 'Private'; 
function printHello() 
{ 
echo $this->public; 
echo $this->protected; 
echo $this->private; 
} 
} 
$obj = new MyClass(); 
echo $obj->public; // 这行能被正常执行 
echo $obj->protected; // 这行会产生一个致命错误 
echo $obj->private; // 这行也会产生一个致命错误 
$obj->printHello(); // 输出 Public、Protected 和 Private 
/** 
* Define MyClass2 
*/ 
class MyClass2 extends MyClass 
{ 
// 可以对 public 和 protected 进行重定义,但 private 而不能 
protected $protected = 'Protected2'; 
function printHello() 
{ 
echo $this->public; 
echo $this->protected; 
echo $this->private; 
} 
} 
$obj2 = new MyClass2(); 
echo $obj->public; // 这行能被正常执行 
echo $obj2->private; // 未定义 private 
echo $obj2->protected; // 这行会产生一个致命错误 
$obj2->printHello(); // 输出 Public、Protected2,但不会输出 Private

注意:类中的方法都必须使用关键字public、protected 或 private 进行定义。如果没有设置这些关键字,则该方法会被设置成默认的 public。
静态方法
静态方法可以不创建对象实例就通过 类名::静态方法 来调用,也可以在一个对象实例中通过$this->静态方法或self::静态方法来调用。
<?php 
class Foo 
{ 
public static $my_static = 'foo'; 
public static function staticValue() { 
return self::$my_static;//在类中访问静态成员使用self关键字 
} 
} 
$obj=new Foo(); 
echo $obj->staticValue();//方式一 
echo Foo::staticValue();//方式二 
?>

克隆对象
在PHP4中,new一个对象的时候,返回的是“对象本身”
在PHP5中,new一个对象的时候,返回的是“指向对象的句柄”
这意味着在PHP5中,将对象实例($obj1)赋值给另一个变量($obj2)的时候,两个对象都是指向同一块内存区域。
比如 :
<?php 
class test{ 
public $str; 
} 
$obj1=new test(); 
$obj1->str="obj1"; 
$obj2= $obj1; 
$obj2->str="obj2"; 
echo $obj1->str;//将输出“obj1” 
?>

由于$obj1和$obj2指向的是同一块内存区域,因此使用任何一个对象修改其中的成员变量的值的时候,都会影响到另一个对象。
但是在有些时候,我们确实需要复制一个对象的拷贝(两块相互独立的内存区域),这时候可以使用语言命令clone
参考下面的例子;
<?php 
class test{ 
public $str; 
} 
$obj1=new test(); 
$obj1->str="obj1"; 
$obj2= clone $obj1; 
$obj2->str="obj2"; 
echo $obj1->str;//将输出“obj2” 
?>

parent::和self::
self::指向当前类,而且通常用来访问静态成员,方法和常量
parent::指向父类,而且它经常被用来调用父类的构造函数和方法,也可以用来访问父类的成员和常量
注意:你应该使用parent::而不是父类的某个具体的名字,因为这样可以令你方便的更改你的类的层次。
例子:
<?php 
class Father{ 
public function __construct(){ 
echo "调用父类的构造函数<br>"; 
} 
} 
class Son extends Father { 
public function __construct(){ 
parent::__construct();//方式一 
// Father::__construct();//方式二 
echo "调用子类的构造函数"; 
} 
} 
$son=new Son(); 
?>

结果:
调用父类的构造函数
调用子类的构造函数
推荐使用方式一,原因上面已经说了。
instanceof实例
<?php 
class Rectangle { 
public $name=__CLASS__; 
} 
class Square extends Rectangle { 
public $name=__CLASS__; 
} 
class Circle{ 
public $name=__CLASS__; 
} 
function checkIfRectangle($shape){ 
if ($shape instanceof Rectangle ){ 
echo $shape->name; 
}else { 
echo "该对象不是Rectangle类的实例"; 
} 
} 
checkIfRectangle(new Square());//输出:Square 
checkIfRectangle(new Circle());//输出:该对象不是Rectangle类的实例 
?>

注:__CLASS__是一个特殊的常量,用来存储当前类的名字
PHP 相关文章推荐
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
May 24 PHP
CodeIgniter上传图片成功的全部过程分享
Aug 12 PHP
php while循环得到循环次数
Oct 26 PHP
Drupal7中常用的数据库操作实例
Mar 02 PHP
php程序员应具有的7种能力小结
Nov 27 PHP
Zend Framework教程之Zend_Layout布局助手详解
Mar 04 PHP
PHP微信分享开发详解
Jan 14 PHP
PHP 二级子目录(后台目录)设置二级域名
Mar 02 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
Apr 10 PHP
PHP开发的微信现金红包功能示例
Jun 29 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
Jul 18 PHP
laravel5环境隐藏index.php后缀(apache)的方法
Oct 12 PHP
PHP中使用unset销毁变量并内存释放问题
Jul 05 #PHP
php Ubb代码编辑器函数代码
Jul 05 #PHP
PHP取整数函数常用的四种方法小结
Jul 05 #PHP
PHP函数学习之PHP函数点评
Jul 05 #PHP
php中根据变量的类型 选择echo或dump
Jul 05 #PHP
PHP写的求多项式导数的函数代码
Jul 04 #PHP
php中禁止单个IP与ip段访问的代码小结
Jul 04 #PHP
You might like
索尼ICF-SW100收音机评测
2021/03/02 无线电
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
2010/06/04 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
大家须知简单的php性能优化注意点
2016/01/04 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
JavaScript高级程序设计(第3版)学习笔记10 再访js对象
2012/10/11 Javascript
面向对象继承实例(a如何继承b问题)(自写)
2013/07/01 Javascript
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
jquery datatable服务端分页
2016/08/31 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
2017/03/14 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
React中jquery引用的实现方法
2017/09/12 jQuery
Angular.js中window.onload(),$(document).ready()的写法浅析
2017/09/28 Javascript
使用webpack3.0配置webpack-dev-server教程
2018/05/29 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
python获取beautifulphoto随机某图片代码实例
2013/12/18 Python
Python实现简单HTML表格解析的方法
2015/06/15 Python
Python3 socket同步通信简单示例
2017/06/07 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
python单例模式原理与创建方法实例分析
2019/10/26 Python
Python tkinter界面实现历史天气查询的示例代码
2020/08/23 Python
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
serialVersionUID具有什么样的特征
2014/02/20 面试题
2015年护士医德医风自我评价
2015/03/03 职场文书
中学教师教学工作总结
2015/08/13 职场文书
2016优秀青年志愿者事迹材料
2016/02/25 职场文书
子女赡养老人协议书
2016/03/23 职场文书
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
2021/05/14 Python
Spring Cache和EhCache实现缓存管理方式
2021/06/15 Java/Android
win10清理dns缓存
2022/04/19 数码科技