面向对象有两个基本概念:类和对象
类的定义格式为“修饰符 class类名{类体}”
类体的内容主要有三种:
编写一个Posern的类
<?php
class Person{
const SCIENTIFIC_NAME="xiao ming"//常量:学名,该属性值不会改变
var $sex;//性别
var $age;//年龄
var $money;//存款
function income($money){
$this->money+=$money;
}
}
?>
在定义一个类后,可以使用“new”运算符来获取一个实例对象:
可以用“->”操作符来访问对象的成员属性和成员方法
同时使用“::”操作符访问静态变量或成员常量
<?php
include 'Person.class.php';
$jack = new Person();
$jack->income(10000);
echo "<p>Jack的存款:".$jack->money;
?>
构造函数是一种特殊的方法,主要用来在创建对象初始化对象,即为对象成员变量赋初始值
void__construct()
构造方法的名称和类名也可以相同
<?php
class Preson{
var $name;//姓名
var $sex;//性别
var $age;//年龄
//写法一:
function __construct($name,$sex,$age){
$this ->name = $name;
$this ->sex = $sex;
$this ->age = $age;
}
//写法二:
function Person($name,$sex,$age){
$this ->name = $naem;
$this ->sex = $sex;
$this ->age =$age;
}
}
?>
析构函数与构造函数相反,析构函数往往用来执行清理善后工作,如内存清理、释放等
void __destruct()
<?php
class Person{
var $name;//姓名
var $sex;//性别
var $age;//年龄
function __destruct(){
echo "运行结束,清理内存";
}
}
?>
如果在类的内部使用属性或方法,则可以用$this来表示实例化后的具体对象
###面对对象特征——封装
类的封装是通过public、private、protected等关键字来实现的,可以很好地限制类中的属性和方法的访问权限。
属性和方法都是公开的,可以在程序中的任何地方被调用,子类可以继承父类的所有公共成员
属性和方法都是私有的,只能在其所属的类的内部调用,子类也不可以访问
属性和方法只有子类才能调用,其他类都不能调用。
使用extends关键字可以继承一个类,不支持多继承,被继承的类交父类,继承的类叫子类。当子类继承父类以后,子类不仅可以拥有自己的属性和方法,还可以拥有父类所有非私有的属性和方法。
被final关键字修饰的类或方法是不能被继承的,也不会有子类。 final关键字不能修饰变量
多态是指在面向对象中能够对同一个接口做出不同的实现。多态主要存在两种形式:
通常应用于没有生命任何实例的情况下使用类的属性或方法。$this 引用只能在类的内部使用,其引用的属性和方法都是该类拥有的,而“::”可以用在其他场景,主要包括以下3中场景:
被static关键字修饰的成员属性称为静态变量。 被static关键字修饰额成员方法称为静态方法
抽象类是用abstract关键字声明的,他是一种不能被实例化的类,只能作为其他类的父类来使用。
一个抽象类至少有一个抽象方法,抽象方法没有方法体,且抽象方法后面要连接一个分号。
接口是用interface关键字来定义的,他是一种特殊的抽象类,接口中未实现的方法,即使是空方法,也必须在子类中实现。一个子类只能继承一个父类,却可以实现多个接口。通过implements关键字可以实现接口。
在PHP中,通常赋值操作是值传递,如果需要引用一个对象,则需要使用“&”来声明。
克隆对象需要使用clone关键字来实现。
使用instanceof关键字来判断对象是哪个类型的。