PHP 面向对象
项目抽象出对象 实现对象 组成项目 将一个项目看成由多个对象组成
面向过程,一个功能一个功能实现,以程序的执行过程
面向对象多人合作,上手比较难。提高开发的效率。php简单好学。这是一个宣传?true:false;(面向过程部分)
OOP (Object Oriented Programming)
OOA (Object Oriented Analysls) 面向对象分许
OOD (Object Oriented Design)面向对象设计
OOP-->所有事物全部被视为对象、代码的可重用、程序可维护性好、可扩展性高,灵活性高
对象 由属性和方法组成
类 具有相同属性和方法的抽象(集合)
在程序中我们需要的是属性和方法来保存数据和执行逻辑,要调用属性和方法必须要有对象,要有对象必须先有类。
开发顺序:类-->对象-->属性和方法
php中实现类
语法:class 类名{
}
类名不区分大小写
命名法:
帕斯卡命名法(大驼峰)首字母大写后面的单词首字母也大写 UserInfo
骆驼命名法(小驼峰)首字母小写,后面单词的首字母大写或者每个单词都小写,中间用下划线连接 userInfo user_name
匈牙利命名法 构成,变量类型+变量名字 iNum(int) fnShow(function) sName(string) aStu(array)
属性:public $name='李白'; //访问修饰符+变量名==属性
方法: function show(){
echo '这是一个方法'; //访问修饰符+方法名
}
类:
class Student{
public $name='李白'; //访问修饰符+变量名==属性
public $sex='男';
function show(){
echo '这是一个方法'; //访问修饰符+方法名
}
}
$stu1=new Student();
//实例化一个对象,并且将这个对象保存到$stu1变量 $stu1是object型
$stu2=new Student();
//$stu1!=$stu2(不是同一个空间) 对象的本质还是变量
//new 用来实例化对象
//类实际上就是一种复杂的类型
?>
调用属性:
在OOP中调用属性和方法,必须要有对象。
echo $stu1->name,'<br>';//调用属性
echo $stu1->show(),'<br>';//调用方法
echo $stu2->name,'<br>';
运行结果:
给属性赋值:
$stu1->name='tom';//给属性赋值
$stu2->name='james';
运行结果:
增加删除属性:
echo '<br>---------------增加属性------------------<br>';
$stu1->add='北京';
var_dump($stu1);
echo '<br>---------------删除属性------------------<br>';
unset($stu2->name);
var_dump($stu2);
运行结果:
判断属性:
echo '<br>---------------判断属性是否存在------------------<br>';
var_dump(isset($stu1->name),isset($stu2->name));
运行结果:
深入理解:
堆栈:指的就是内存(依次检索的)常用数据放在栈里面(比较小)堆中放置较大的数据,内存地址放在栈中。
$stu1=new Student();
Student()放在堆中,$stu1放在栈中 属于引用传递
访问修饰符:
Public 可以在类的内部和外部访问
Private 只能在类的内部访问
Protected 可以在类的内部和子类中访问(可以在整个继承链上访问)
在OOP中,属性一般都是私有的,我们通过公有的方法给他赋值取值;
封装
访问修饰符的作用就是用来做封装的;
封装的目的是用来有选择性的提供数据和访问;
构造方法:也叫构造函数,在实例化对象的时候自动执行;
只要实例化一次就自动调用一次
Public 可以省略,默认为public
析构方法:也叫析构函数,当这个对象销毁的时候自动执行;
如果我们实例化两个对象,谁先销毁呢?
$stu=new Student('tom','男');
$stu->show();
$stu2=new Student('james','男');
$stu2->show();
由此图知,先销毁的是james 栈是先进后出;
unset($stu); //销毁$stu
$stu2=null;//销毁$stu2
析构函数里面不允许有参数;
继承
具有层次性;
子类继承了父类的属性和方法,实现了代码的可重用性;(私有属性也继承了,但是不能直接访问,没有权限使用)
父类和子类具有相对性
调用父类的属性和方法:通过$this
如果子类没有构造函数,就调用父类的;
如果子类有构造函数,那就调用自己的,父类的构造函数不被调用。
通过parent或者类名调用父类的构造函数
Parent指的就是父类的名字;new Person() 和 new parent() 一样;
子类给父类的构造函数赋值
PhP不允许多重继承(C# ,java 都不行 C++可以)
可以形成一个继承链来实现C继承B并且继承A;
$this
$this 表示当前对象的引用;
判断: $this 表示$this所在类的对象(错误)
编辑过程中图片变的有点模糊了,有点影响阅读的效果。