一、 封装:
  a) 描述:使用成员修饰符修饰成员属性和成员方法,能够最大限度的隐藏对象内部的细节,保证对象的安全
  b) PPP修饰符:public(公共的),protected(受保护的),private(私有的)
  c) Protected和private修饰符所修饰的成员属性,在类的外部不能进行访问
  d) Protected和private修饰符所修饰的成员方法,砸类的外部也不能进行访问
二、 魔术方法:
  a) Music => gusic
    i. g => __get
      1. 自动执行的场景:
        a) 当我们在外部访问一个非公有的成员属性或不存在的成员属性时,会自动调用
        b) 当自动调用__get方法时,会将正在访问的成员属性名称传递到__get方法内部

 define('AUTH',1);    //1.开启   0.关闭

 //声明一个女神类
class Godness{ //特征 => 成员属性
public $name;
protected $age;
private $sanwei; //构造方法
public function __construct($name,$age,$sanwei){
$this->name = $name;
$this->age = $age;
$this->sanwei = $sanwei;
} //功能 => 成员方法
public function sing(){
echo '我正在唱歌中……么么哒!!';
} protected function dance($name){
echo '我正在和'.$name.'跳舞中……哈哈哈!!';
} private function action(){
echo '我正在和胡歌一起拍电影中!';
} //__get魔术方法(当我们访问一个不存在的成员属性或非公有的成员属性,会自动调用)
public function __get($name){ if(AUTH){
if(isset($this->$name)){
return $this->$name;
}else{
return false;
}
}else{
return false;
}
}
} //实例化一个女神
$gaoyuanyuan = new Godness('高圆圆','32','80,50,80'); //访问一个非公有的属性
echo $gaoyuanyuan->sanwei; //80,50,80 //访问一个不存在的属性
var_dump($gaoyuanyuan->sex); //D:\wamp\www\lamp183\lesson29_oop2\3.php:87:boolean false

    ii. u => __unset
      1. 自动执行的场景:
        a) 当我们在类的外部销毁一个非公有的成员属性时,会自动调用
        b) 当自动调用__unset方法时,会将正在销毁的成员属性名称传递到__unset方法内部

 define('AUTH',1);    //1.开启   0.关闭

 //声明一个女神类
class Godness{ //特征 => 成员属性
public $name;
protected $age;
private $sanwei; //构造方法
public function __construct($name,$age,$sanwei){
$this->name = $name;
$this->age = $age;
$this->sanwei = $sanwei;
} //功能 => 成员方法
public function sing(){
echo '我正在唱歌中……么么哒!!';
} protected function dance($name){
echo '我正在和'.$name.'跳舞中……哈哈哈!!';
} private function action(){
echo '我正在和胡歌一起拍电影中!';
} //__unset魔术方法(当我们销毁一个非公有的成员属性时,会自动调用)
public function __unset($name){
if(AUTH){
unset($this->$name);
}
}
} //实例化一个女神
$gaoyuanyuan = new Godness('高圆圆','32','80,50,80'); //销毁一个非公有的属性
unset($gaoyuanyuan->age);
unset($gaoyuanyuan->sanwei);
var_dump($gaoyuanyuan); //结果
object(Godness)[1]
public 'name' => string '高圆圆' (length=9)

    iii. s => __set
      1. 自动执行的场景
        a) 当我们在类的外部设置一个非公有属性值时,会自动调用
        b) 参数:会自动传递正在设置的参数名以及设置的参数值这两个参数到__set方法内部

 define('AUTH',1);    //1.开启   0.关闭

 //声明一个女神类
class Godness{ //特征 => 成员属性
public $name;
protected $age;
private $sanwei; //构造方法
public function __construct($name,$age,$sanwei){
$this->name = $name;
$this->age = $age;
$this->sanwei = $sanwei;
} //功能 => 成员方法
public function sing(){
echo '我正在唱歌中……么么哒!!';
} protected function dance($name){
echo '我正在和'.$name.'跳舞中……哈哈哈!!';
} private function action(){
echo '我正在和胡歌一起拍电影中!';
} //__set魔术方法(当我们设置一个非公成员属性时,会自动调用)
public function __set($name,$value){
if(AUTH){
$this->$name = $value;
}
}
} //实例化一个女神
$gaoyuanyuan = new Godness('高圆圆','32','80,50,80'); //修改一个非公有的属性
$gaoyuanyuan->sanwei = '100,80,100';
$gaoyuanyuan->age = 20;
var_dump($gaoyuanyuan); //结果
object(Godness)[1]
public 'name' => string '高圆圆' (length=9)
protected 'age' => int 20
private 'sanwei' => string '100,80,100' (length=10)

    iv. i => __isset
      1. 自动执行场景:
        a) 当我们在类的外部判断一个非公有属性或不存在的属性是否存在时,会自动调用
        b) 参数:会自动传递正在判断的成员属性名到__isset方法内部

 define('AUTH',1);    //1.开启   0.关闭

 //声明一个女神类
class Godness{ //特征 => 成员属性
public $name;
protected $age;
private $sanwei; //构造方法
public function __construct($name,$age,$sanwei){
$this->name = $name;
$this->age = $age;
$this->sanwei = $sanwei;
} //功能 => 成员方法
public function sing(){
echo '我正在唱歌中……么么哒!!';
} protected function dance($name){
echo '我正在和'.$name.'跳舞中……哈哈哈!!';
} private function action(){
echo '我正在和胡歌一起拍电影中!';
} //__isset魔术方法(当我们判断一个非公有属性或不存在的成员属性时,会自动调用)
public function __isset($name){
if(AUTH){
return isset($this->$name);
}
}
} //实例化一个女神
$gaoyuanyuan = new Godness('高圆圆','32','80,50,80'); //判断一个非公有属性是否存在
var_dump(isset($gaoyuanyuan->sex)); //D:\wamp\www\lamp183\lesson29_oop2\3.php:99:boolean false

    v. c => __call
      1. 自动执行场景:
        a) 当我们在类的外部调用一个非公有的方法的时候,会自动调用
        b) 参数:会自动传递正在调用的方法的名称以及参数列表到__call方法内部(注意:参数列表接收到的是一个数组)

 define('AUTH',1);    //1.开启   0.关闭

 //声明一个女神类
class Godness{ //特征 => 成员属性
public $name;
protected $age;
private $sanwei; //构造方法
public function __construct($name,$age,$sanwei){
$this->name = $name;
$this->age = $age;
$this->sanwei = $sanwei;
} //功能 => 成员方法
public function sing(){
echo '我正在唱歌中……么么哒!!';
} protected function dance($name){
echo '我正在和'.$name.'跳舞中……哈哈哈!!';
} private function action(){
echo '我正在和胡歌一起拍电影中!';
} //__call魔术方法(当我们调用一个非公有方法时,会自动调用)
public function __call($funcName,$args){ if(AUTH){
$args = implode(',',$args);
return $this->$funcName($args);
} } } //实例化一个女神
$gaoyuanyuan = new Godness('高圆圆','32','80,50,80'); //调用一个非公有的方法
$gaoyuanyuan->dance('符泰迪','李腊肠','李赖赖'); //我正在和符泰迪,李腊肠,李赖赖跳舞中……哈哈哈!!

三、 继承:
  a) 继承的使用场景:
    i. 我没有,但是别人(别的类)有,那么,我直接把那个人(那个类)拥有的成员属性和成员方法继承过来;
    ii. 继承之后的结果:父类当中所有的成员属性和成员方法都可以继承,(包括构造方法和析构方法),但是除了私有的成员;
    iii. 继承的格式:class A extends B{}
    iv. 试验:PPP修饰符的访问控制
      在类的外部 在子类 在本类
      Public           √   √   √
      Protected    ×   √   √
      Private         ×   ×       √

    v. 子类对父类的重写:
      1. 如果子类当中的方法与父类当中的方法同名,则子类的方法会将父类的方法覆盖!如果我们调用该方法,调用的时子类的方法,而不是父类的!
      2. 如果你需要使用到父类当中这一个同名的方法时,需要使用一个关键字:
        a) Parent::父类当中的方法名;
    vi. PHP当中的单继承:
      1. 如果一个类想要继承多各类,不能同时继承多各类,而可以采用链式继承
      2. 格式:class A extends B{} class B extends C{}

四、 自动转换为布尔型假的情况
  a) 四种标量
    i. 整型:0
    ii. 浮点型:0.0或0.00
    iii. 字符串型:’’或’0’
    iv. 布尔型:false
  b) 两种复合
    i. 对象型:不行
    ii. 数组型:array();
  c) 两种特殊
    i. 资源型:不行
    ii. 空型:null或NULL或Null

【php】面向对象(二)的更多相关文章

  1. 2. 星际争霸之php面向对象(二)

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. Javascript面向对象二

    Javascript面向对象二 可以通过指定原型属性来对所有的对象指定属性, Object.prototype.name="zhangsan"; Object.prototype. ...

  3. python面向对象二

    1.1类的静态属性,类方法,类的静态方法 1.1.1静态属性(@property) 在类中: python内置的@property装饰器就是负责把一个方法(函数)变成属性来调用. class Stud ...

  4. canvas学习和面向对象(二)

    Canvas 学习(二) 上一篇Canvas 学习(一)中我是用canvas绘制了一些基本和组合的图形. 现在开始绘制图片和动画帧,以及面向对象的升级版本. 还是一样,看代码,所有的代码都托管在git ...

  5. JavaScript 面向对象(二) —— 案例篇

    看案例前可以先看看基础篇:JavaScript 面向对象(一) —— 基础篇 案例——面向对象的选项卡:把面向过程的程序一步步改成面向对象的形式,使其能够更加的通用(但是通用的东西,一般会比较臃肿). ...

  6. JavaScript面向对象(二)——成员属性、静态属性、原型属性与JS原型链

      前  言 JRedu 上一篇博客中,我们介绍了JS中的面向对象,并详细的解释了this的指向问题.本篇博客,我们继续来学习JS的面向对象.来深入理解一下JavaScript OOP中的成员属性/方 ...

  7. 第八章:Python基础の面向对象(二)

    本課主題 面向对象的多态 面向对象的成员 成员修饰符 特殊成员 面向对象其他应用 异常处理 设计模式与单例模式 面向对象的多态 指定参数类型只是多态的一种表现 另外一种是允许自己类型和自己的子类型(典 ...

  8. Python之面向对象二

    面向对象的三大特性: 继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 c ...

  9. Python自动化开发 - 面向对象(二)

    本节内容 1.isinstance(obj,cls)和issubclass(sub,super) 2.反射 3.__setattr__,__delattr__,__getattr__ 一. isins ...

  10. python 面向对象二 类和实例

    一.类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法, ...

随机推荐

  1. background-attachment 制造视差滚动效果案例

    简介 background-attachment 属性设置背景图像是否固定或者随着页面的其余部分滚动.可能的值有三个: scroll 默认值.背景图像会随着页面其余部分的滚动而移动. fixed 当页 ...

  2. python3使用js2py

    安装: pip install js2py 使用: 执行js函数: 执行js函数: import js2py js = js2py.EvalJs({}) js.execute("" ...

  3. 2016 Multi-University Training Contest 1 T3

    题目要求出所有合法点对间的最短路径的平均值,因此我们应当求出所有合法最短点对的最 短路径之和,再除以合法点对个数. 题目中Guard之间有着很不自然的制约关系,每个Guard的周围和同行.列都不能有其 ...

  4. 移动端Rem适配(基于vue-cli3 ,ui框架用的是vant-ui)

    介绍postcss-pxtorem 是一款 postcss 插件,用于将单位转化为 remlib-flexible 用于设置 rem 基准值 1.安装lib-flexible(用于设置 rem 基准值 ...

  5. PyQt5UI文件转换为对应版本的py文件

    PyQt5 UI文件转换为对应版本的py文件 #coding=utf-8 ''' PyQt5 UI文件转换为对应版本的py文件 python -m PyQt5.uic.pyuic untitled.u ...

  6. pytorch里一些函数的说明记录

    THLongStorage *THTensor_(newSizeOf)(THTensor *self); THLongStorage *THTensor_(newStrideOf)(THTensor ...

  7. Journal of Proteome Research | Quantifying Protein-Specific N-Glycome Profiles by Focused Protein and Immunoprecipitation Glycomics (分享人:潘火珍)

    文献名:Quantifying Protein-Specific N-Glycome Profiles by Focused Protein and Immunoprecipitation Glyco ...

  8. 关于Quartz .NET(V3.0.7)的简要说明

    目录 0. 任务调度 1. Quartz .NET 1.1 基本概念 1.2 主要接口和对象 2. 使用示例 2.0 准备工作 2.1 每间隔一定时间间隔执行一次任务 2.3 某天的固定时间点执行任务 ...

  9. MySQL笔记(8)-- 索引类型

    一.背景 前面我们讲了SQL分析和索引优化都涉及到了索引,那么什么是索引,它的模型有什么,实现的机制是什么,今天我们来好好讨论下. 二.索引的介绍 索引就相当书的目录,比如一本500页的书,如果你想快 ...

  10. shellcode

    msf > use windows/exec msf > set CMD calc.exe msf > set EXITFUNC thread msf > generate - ...