一、 封装:
  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. Expression表达式目录树

    一.初识Expression 1.在上一篇我们讲到了委托(忘记了可以在看看,点赞在看养成习惯),今天要讲的Expression也和委托有一点点关系吧(没有直接关系,只是想要大家看看我其他的文章),Ex ...

  2. mui switch 点击事件不冒泡

    工作上遇到一个问题 手机移动端app,采用mui框架,要求左边是手机号码,右边是switch开关,并且点击标题的时候,可以展开下面人员的基本信息. 采用了折叠面板. 先上图如下: 开始时出现的问题是: ...

  3. 关于emgucv控制多摄像头问题

    看到这篇文章你或许已经查阅很多资料,也可能你刚准备深入研究,但是关于调用多摄像头问题我要说明一点,关于多摄像头调用 取决于你电脑本身USB控制器数量,不是说你电脑上5个usb就可以同时控制5台摄像头, ...

  4. SpringBoot的启动流程是怎样的?SpringBoot源码(七)

    注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 温故而知新 本篇接 SpringBoot内置的各种Starter是怎样构建的? SpringBoot源码(六) 温故而知新, ...

  5. 两个奇技淫巧,将 Docker 镜像体积减小 99%

    原文链接:Docker Images : Part I - Reducing Image Size 对于刚接触容器的人来说,他们很容易被自己构建的 Docker 镜像体积吓到,我只需要一个几 MB 的 ...

  6. NIO的原理和文件读入读出及图片拷贝的使用

    1.NIO的简介        java.nio 全称 java non-blocking IO 是jdk1.4之后出现的 New IO        为所有的原始类型(boolean除外)提供了缓存 ...

  7. shell编程之循环语句

    for #! /bin/sh for FRUIT in apple banana pear; do echo "I like $FRUIT" done while #! /bin/ ...

  8. cmdb客户端代码完善2

    目录: 1.面试提问 2.完善采集端代码 3.唯一标识的问题 4.API的验证 1.面试会问到的问题: # 1. 为啥要做CMDB?# - 实现运维自动化, 而CMDB是实现运维自动化的基石# - 之 ...

  9. hdu3294 Manacher算法模板

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/3294/ 回文长度如果是mxx,回文中心是id的话,在扩展串中(id-mxx+1,id+mxx-1)的这段中去除标 ...

  10. 【bug】table重新加载数据,页面滚动条下沉到底部,记录scrollTop后将其恢复scrollTop出现闪烁

    1.table数据请求前记录scrollTop $scope.scrollPos = document.documentElement.scrollTop; 2.html中添加指令repeat-fin ...