这段时间一直使用PHP语言,之前没有好好的学过PHP的东西,仅仅有有一点PHP的基础知识,这一次工作中用到的比较频繁,今天就整理一下PHP中使用OOP的思想的笔记。
属性
类的变量成员称为属性,属性可以使用public\protected\private来实现访问控制。属性中的变量可以初始化,但是初始化的值必须是常数。
public | protected | private |
---|---|---|
公有的类成员可以在任何地方被访问 | 受保护的类成员则可以被其自身以及其子类和父类访问 | 被定义为私有的类成员则只能被其定义所在的类访问。 |
注意: 同一个类的对象即使不是同一个实例也可以互相访问对方的私有与受保护成员。这是由于在这些对象的内部具体实现的细节都是已知的。
类常量
可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。
常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用。
对象继承
继承对于功能的设计和抽象是非常有用的,而且对于类似的对象增加新功能就无须重新再写这些公用的功能。除非使用了自动加载,否则一个类必须在使用之前被定义。如果一个类扩展了另一个,则父类必须在子类之前被声明。此规则适用于类继承其它类与接口。
范围解析操作符 (::)
范围解析操作符,更简单地说是一对冒号,可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法。
MyClass::CONST_VALUE;
parent::CONST_VALUE;
self::$my_static;
OtherClass::doubleColon();
补充:静态调用非静态方法 参考
总的来说这是PHP的语言发展中产生的遗留的问题,由于这个问题已经形成PHP5也就没有对此进行规范约束。
静态调用非静态方法在性能和内存上都不占优势;另外,此种调用方法容易产生维护混乱。那么,来个短而有力的总结:静态调用非静态方法不可取。
self、this、parent、static
this、self,parent 和 static 这三个特殊的关键字是用于在类定义的内部对其属性或方法进行访问的。
this | self | parent |
---|---|---|
这 | 自己 | 父亲 |
指向当前对象的指针 | self是指向当前类的指针 | parent是指向父类的指针 |
static 声明类属性或方法为静态,就可以不实例化类而直接访问。静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。
没有指定访问控制,属性和方法默认为公有。
由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。
静态属性不可以由对象通过 -> 操作符来访问。
用静态方式调用一个非静态方法会导致一个 E_STRICT 级别的错误。
魔术方法
__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等方法在 PHP 中被称为”魔术方法”(Magic methods)。在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能。
类比Java
PHP5引入的OOP的思想,和Java中的好多的地方是基本一致的。
包括:
对象的拷贝:深拷贝和浅拷贝
对象和引用:php的引用是别名,就是两个不同的变量名字指向相同的内容。
匿名类:就是声明在方法中的一种类。
接口和抽象类等基本一致。