学习要以最快的速度学习,因为有些事情,容不得你等,你也等不起,你学的速度越快,你才能面对的更多!
this的绑定
-
当一个对象被实例化出来之后,调用这个实例对象的方法,在执行函数之前会进行一个操作,就是绑定this,将this绑定到调用此方法的对象上;
-
this就代表了当前对象;
-
示例:
class Ren{
public $name = '小明';
public function sayName(){
echo $this->name;
}
}
// 创建实例
$a = new Ren();
$a -> name;//小明
$a -> sayName();//小明
//此时,sayName函数中的$this,可以理解成:$a -> name;
//this只有在运行时候才能确定,到底是指代了谁;
- 在方法中,想访问调用者的属性,则必须使用$this;
- 如果不用$this,则认为这个属性是函数内的句不变量,如果方法内存在这个变量,则拿来用,如果不存在,则报错undefined;
封装的概念
- 封装的概念
- 权限修饰符
- 封装MySQL类
- 重载
面向对象三大特征
封装 继承 多态
封装的概念
示例1:
class Ren{
private $money = 1000;
public function subMoney($num){
$this->money += $num;
}
public function getMoney(){
return $this -> money;
}
}
echo $zhangsan -> money;//报错
$zhangsan = new Ren();
$zhangsan -> subMoney(20);
$a = $zhangsan -> getMoney();
echo $a;//1020
-
因为这个实例对象的$monry属性的修饰符是privare,这个单词的中文意思有私人的,私有的意思,所以,当一个变量的修饰符被定义为私有时,则在只能在当前类中进行访问,外界是无法访问到这个变量的;
-
与private相反的,public这个修饰符,中文意思有公共的、公有的,那么除了在类中可以访问修改以外,在类的外部,也是可以随意修改的;
-
上面的例子就很简略的体现了面向对象的含义,例如,在人这个类上都有钱这个属性,但是,钱是每个类的实例的,其他人不能随意修改,所以,根据实际情况合理的使用【权限修饰符】能让开发质量更高;私有变量提供修改的方法,而不能让外界直接修改,这就是控制属性的可读可写性;一些重要的属性进行私有化,也可以说是封装了起来,然后再提供修改的方法,别人更愿意叫它api;
示例2:
class Ren{
private $money = 1000;
public function send($much){
if($much <= 100){
$this->money -= $much;
echo "借出 $much 元,剩余: $this->money 元";
}else{
echo '太多了,不借!';
}
}
}
$a = new Ren();
$a -> send(200);
- 封装非常简单,就一句话:一切能封装起来的都应该封装起来,而类似权限修饰符,this,构造函数,析构函数,这些东西都是服务于面向对象的;
- 封装最终的目的其实就是复用,是最直观的体现,也是封装这个概念,本来就想要达到的目的;
- 就像汽车,兰博基牛,这辆车就是一个封装的对象,人开车,人需要管这个车是怎么把汽油转化成动力的吗?不需要,你只要上车,点火,踩离合踩刹车,挂挡,松刹车,踩油门,车这个对象就开始工作了,你只需要按照它的流程去操作,就行了;
- 多态是比较宽泛的,比如两栖步兵战车,这辆车的发动机就一个,但是驱动不一样,导致它可以在水里行进,也可以在陆地上行进,这就很灵活;