OOP达到了软件工程的三个目标:重用性、灵活性和扩展性
OOP的三大特性:封装、继承、多肽
一、类
1、类名、变量名及函数名的命名规则相似。如果由多个单词组成,习惯上每个单词的首字母要大写。另外类名的定义也要具有一定的意义,不要随便由几个字母组成。
2、修饰类的关键字abstract、final等
3、成员属性或成员方法可以使用public、protected、private等关键字修饰
4、实例化对象
一个类可以实例化出多个对象,每个对象都是独立的,相当于在内存中开辟不同的空间存放每个对象。
$person = new Person();等号右边是创建的真正对象实例,被存储在堆内存段中;而等号左边则是对象的引用,被存储在栈内存段中
5、在类的成员方法里面,可以用 ->(对象运算符):$this->property(其中 property 是该属性名)这种方式来访问非静态属性。静态属性则是用 ::(双冒号):self::$property 来访问
6、当一个方法在类定义内部被调用时,有一个可用的伪变量 $this。特殊的对象引用$this就是在对象内部的成员方法中,代表‘本对象’的一个引用。
7、类的继承extends
一个类可以在声明中用 extends 关键字继承另一个类的方法和属性。PHP不支持多重继承,一个类只能继承一个基类;
被继承的方法和属性可以通过用同样的名字重新声明被覆盖。但是如果父类定义方法时使用了 final,则该方法不可被覆盖。可以通过 parent:: 来访问被覆盖的方法或属性。
当覆盖方法时,参数必须保持一致否则 PHP 将发出 E_STRICT
级别的错误信息。但构造函数例外,构造函数可在被覆盖时使用不同的参数。
<?php
class SimpleClass
{
// 声明属性
public $var = 'a default value';
// 声明方法
public function displayVar() {
echo $this->var;
}
}
class ExtendClass extends SimpleClass
{
// Redefine the parent method
function displayVar()
{
echo "Extending class\n";
parent::displayVar();
}
}
$extended = new ExtendClass();
$extended->displayVar();
/*
输出
Extending class
a default value
*/
?>
8、类常量
可以把在类中始终保持不变的值定义为常量。将类中的成员属性使用const关键字标识为常量,其访问的方式和静态成员一样,都是通过类名或在成员方法中使用self关键字访问,也不能用对象来访问
常量的值必须是一个定值,不能是变量。标识为常量的属性是只读的,不能重新赋值。所以在声明常量时一定要赋初值。
在定义和使用常量的时候不需要使用 $ 符号,而且常量名称一般都是大写的。
接口(interface)中也可以定义常量
<?php
class MyClass
{
const constant = 'constant value';
function showConstant() {
echo self::constant . "\n";
}
}
echo MyClass::constant . "\n";
$class = new MyClass();
$class->showConstant();
echo $class::constant."\n"; // 自 PHP 5.3.0 起
?>