《PHP权威指南》第一章节笔记
来源:互联网 发布:ipython 源码安装 编辑:程序博客网 时间:2024/05/01 13:54
写在前面的话
自己写php代码也有半年的时间了,在这半年里,有收获,有喜悦,也有迷惑. 从不懂php, 到现在可以作为一个普普通通的板砖人士. 回过头来发现自己对于PHP基础的东西还是不会. 决定回到以前,重新学习PHP基础知识。 从最为经典的《PHP权威指南》入手,把自己看到记录下来,一来回顾,二来鞭策自己。 希望能与大家一起共勉
1.对象的引用
- 在php 5之前的版本,如果把一个对象变量赋值给一个新的变量,那么这个新的变量并不是和原来的变量指向同一对象,而是重新创建一个新的对象. 当然现在不会出现这一问题, 如果要使用创建对象的副本可以使用 clone, 如:
$new-object=clone $object
,来创建一个新的对象. 我们也可以创建一个类,来证明上面所说的
class Person{ private $name; public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } public function __construct($name) { $this->setName($name); }}$Person=new Person('123');echo $Person->getName()."<br/>";$PersonTwo=$Person;$PersonTwo->setName('456');echo $Person->getName()."<br/>";$PersonThree= clone $Person;$PersonThree->setName('789');echo $Person->getName();/**输出结果:123456456**/
从上面输出的结果可以看出,现在的PHP版本,对于对象变量间的赋值是引用赋值,而不是新建对象. 而clone 可以生成一个新的对象. clone在拷贝对象的时候,会见对象的属性值等信息一起拷贝.
- 我们也可以用
instanceof
来监测这个对象变量是哪个对象的,
$Person=new Person('123');echo $Person instanceof Person;//返回1表示是这个对象的变量, 返回0则不是//输出: 1
2. final声明的方法和类
- 用final方法声明过的类,是不能继承的, 如果继承这样的类,php会发出这样的错误信息,
Fatal error: Class PersonT may not inherit from final class (Person),翻译过来的意思是: 致命的错误,final类Person不能被PersonT类继承.
//即便你的类中什么也不写, 你也不实例化它,就把他放在脚本里,你在运行脚本的时候,就会发生Fatal errorclass PersonT extends Person{}
- final 声明的方法不可以被重写, 也就是不能再子类中定义这个方法,同样的也是致命错误:
Fatal error: Cannot override final method Person::setName()
//用final定义的的方法是Person类中的setName方法class PersonT extends Person{ public function setName($name){ echo $name; }}
3.静态方法和静态属性
静态方法不用实例化类,直接使用类名就可以调用, 比如Singleton::getInstance()
,在静态方法里头不能使用$this, 因为它没有绑定到具体的对象。静态属性可以用类自身来访问self::instance
, 静态方法也可以使用self来访问,当然这个静态方法必须是类自己的
//这里我们创建了一单件模式class Singleton{ private static $instance = null; public static $param=321; private function __construct() {} public static function getInstance() { if (self::$instance == null) { self::$instance = new Singleton(); } return self::$instance; } public function __toString() { return 'object'; }}echo Singleton::getInstance();echo Singleton::$param;//输出: object 321
4.抽象类和抽象方法
- 抽象类,就是用abstract 定义的类就是抽象类, 抽象类中可以没有抽象方法,但是抽象类不能实例化, 必须由子类继承,然后实例化.如果子类没有实例化抽象类中的抽象方法,在加载子类脚本文件的会发生致命错误.
//在加载这个脚本文件的时候就会有错误信息提示abstract class BaseClass{ protected $name; abstract public function getName(); public function setName($name) { $this->name = $name; }}class MyClass extends BaseClass{ // public function getName() // { // echo $this->name; // }}
5.函数声明的时候可以给参数进行对象类型提示
如果我们在给函数或者方法传递参数的时候,为了避免传入错误的对象变量,可以使用 function test(Singleton $object)
,这样声明函数后,如果传入的对象类型不是Singleton,有这样的错误提示:
Catchable fatal error: Argument 1 passed to test() must be an instance of Singleton
//代码块function test(Singleton $object){ echo '1234';}test(new Person('12'));
今天的内容就到这里, 晚安!!
- 《PHP权威指南》第一章节笔记
- Cocos2D权威指南 试读章节略读笔记
- javascript权威指南第一部分学习笔记
- hadoop权威指南第一第二章笔记
- mongodb权威指南笔记
- javascript 权威指南笔记
- armcm3权威指南笔记
- http权威指南笔记
- 《Javascript 权威指南》笔记
- Hadoop权威指南笔记
- HTTP权威指南 笔记
- javascript权威指南-笔记
- JavaScript权威指南笔记
- html权威指南笔记
- git权威指南 笔记
- MongoDB权威指南笔记
- CSS权威指南 笔记
- HTTP权威指南笔记
- spring framework体系结构及内部各模块jar之间的maven依赖关系
- JavaSE 04 数组
- java算法视频深度讲解
- VC++6遇到的问题(持续更新)
- 续一,用RecyclerView来实现苹果后台样式的卡片布局
- 《PHP权威指南》第一章节笔记
- 字符串调整
- Hadoop伪分布式-----HBase的安装和配置
- 看完 穿条纹睡衣的男孩 之后
- C#125课的主要内容
- UVA 658 状态压缩+最短路
- Kail安装docker和intrigue-core用于信息收集
- mysql+navicat注册启动服务需要注意的事情
- 零基础精通PHP+MySQL网络编程课程