面向对象在很多语言,如c,java,c++,c#等语言中都有,它与面向过程的区别在于:面向过程实现功能时使用几十个代码块,而面向对象可以使用一个广泛的代码块实现功能。
在分享php的面向对象之前我们先来看看js的面向对象,他们的写法都相同之处,我们可以对比着学习。
js的面向对象
js的面向对象首先定义一个函数,函数名首字母要大写,是习惯规定。传入参数,函数里面的this指向这个函数,定义函数的name,age属性,也可以定义一个函数。然后实例化对象,传参传入相应的值,js还可以直接用 对象名.属性 来设置属性。
function Mylover(name,age){
this.name = name;
this.age = age;
this.shop = function(){}
}
// 创建一个对象
var _mylover = new Mylover("wss",19);
// 给对象一个属性like
_mylover.like = "打游戏";
console.log(_mylover);
打印的Mylover对象如下:

php的面向对象
- 首先定义一个类
使用public,protected,private来定义属性,类里面可以定义一个方法。
构造函数: __construct前面是两个下划线,作用是:实例化的类的时候,会自动执行。一般用于类的初始化,比如给属性赋值
// 定义对象 class
class Student{
// 属性
public $name;
public $age;
public $sex;
// 定义一个方法
public function study(){
echo "数学";
}
// 构造函数 __construct
public function __construct($name,$age,$sex){
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
}
- 实例化类
$Student称为类Student的实例
$Student = new Student("ltt","22","女");
- 对象的属性和方法
使用 -> 符号执行对象的方法或者属性
$Student->study();
- 类的继承
上面定义了一个Student类,现在再定义一个大学生类,这个肯定有些属性和学生类相同,但肯定也有一些自己独特的属性,比如:学分(score)。
使用 extends 关键字继承Student的类。析构函数里,继承Student类里的方法使用关键字 parent::这样Bigstudent就继承了Student里的$name,$sex,$age三个类。
class Bigstudent extends Student{
public $score;
public function __construct($name,$sex,$age,$score){
parent::__construct($name,$sex,$age);
$this->score = $score;
}
}
下面实例化Bigstudent
Bigstudent是子类,Student是父类;子类:就是继承父类,通过继承,子类可以获得父类的属性与方法。
$s1 = new Bigstudent("张三","男","18","80");
$s1->study();
echo $s1->name.$s1->sex.$s1->age.$s1->score;
结果图:

- public、protected、private
- public 属于公开的属性,外部可以直接访问
- protected 保护的 这是子类能访问到,但是外部不可以访问
- private 私有属性 -只有类自己内部能操作
网友评论