1.封装

目的:就是为了让类更加安全

做法:

1 要将成员做成私有的

2 在类里面做方法来间接访问成员变量

3 在方法里面加控制

简单的:

第一个魔术方法:给变量赋值的        __set

function __set($n,$v)    第一个参数变量名,第二个参数变量值

{

if($n=="age" )                       加限制条件

{

if($v>18 && $v<50)

{

$this->$n =$v;

}

}

else

{

$this->$n =$v;

}

}

$r->age =30;      自动调用__set()方法,将变量名当做第一个参数,将等号右边的值当做第二个参数

第二个魔术方法:用来取变量值的   __get

function __get($n)

{

return $this->$n;    直接返回

}

echo $r->sex;   写这个的时候可以自动调用__get(),将变量名当做参数,没有提示,自己写出来用

$r = new Ren("男");

$r->__set("age",30);

$r->name ="张三";   也可以

繁琐的:

class Ren

{

public $code;       人员代号

private $name;    人员姓名

private $sex;        人员性别

private $age;       人员年龄     做成了私有的,怎么实现访问

function __construct($s)       构造方法,用来初始化性别

{

$this->sex =$s;

}

造一个修改年龄的方法

function SetAge($a)

{

if($a>18 && $a<50);   加控制

{

$this->age=$a;

}

}

造一个获取age值得方法

function GetAge()

{

teturn $this->age;

}

}

造对象

$r = new Ren("男");

$r->SetAge(20);

var_dump($r);

例:

class Dog

{

public $name;

function Jiao()

{

echo $this->name."在叫";

}

function SetName($n)

{

$this->name =$n;

return $this;      <-----   加了       连续去调    后期很多都是这种调用方式,返回该对象,继续调下一个

}

}

$d = new Dog();

$d->SetName("旺财")->Jiao();

2.继承

1 父类

2 子类    可以继承父类的一切

特点:单继承,一个子类只能有一个父类,一个父类可以派生多个子类

class Ren

{

public $name;

function Say()

{

echo $this->name."正在说话";

}

}

class China extends Ren              extends    <----    实现继承

{

 子类对父类的方法进行重写

function  Say()

{

怎么在子类里调父类的成员

parent::Say();        父类里面的内容拿过来 

echo "你好";

}

function Run()

{

echo $this->name."正在跑步";

}

}

class America extends Ren

{

echo "hello";

}

$c = new China();

$c->Say();

$a = new America();

$a->Say();

var_dump($c);

override  重写 

overload  重载

可以使类里面的某个方法产生多种效果,根据传入的参数不同可以执行不同的逻辑

重载也是多态的一种,编译多态

例:

echo rand(0,10); 随机数

echo date("Y-m-d");   生成当前时间

3.多态

概念:当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,父类引用在调用该方法的时候表现出的不同,称为多态

条件

运行多态,在运行的时候出现的

1 要有继承

2 父类引用指向子类实例

父类引用:定义了一个变量  ,类型必须是父类的类型

$r = new Ren();

3 要有重写

4 调重写的方法

PHP面向对象 三大特性的更多相关文章

  1. [.net 面向对象编程基础] (11) 面向对象三大特性——封装

    [.net 面向对象编程基础] (11) 面向对象三大特性——封装 我们的课题是面向对象编程,前面主要介绍了面向对象的基础知识,而从这里开始才是面向对象的核心部分,即 面向对象的三大特性:封装.继承. ...

  2. [.net 面向对象编程基础] (12) 面向对象三大特性——继承

    [.net 面向对象编程基础] (12) 面向对象三大特性——继承 上节我们说了面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低 ...

  3. [.net 面向对象编程基础] (13) 面向对象三大特性——多态

    [.net 面向对象编程基础] (13) 面向对象三大特性——多态 前面两节,我们了解了面向对象的的封装和继承特性,面向对象还有一大特性就是多态.比起前面的封装和继承,多态这个概念不是那么好理解.我们 ...

  4. 面向对象编程(九)——面向对象三大特性之继承以及重写、Object类的介绍

    面向对象三大特性 面向对象三大特征:继承 :封装/隐藏 :多态(为了适应需求的多种变化,使代码变得更加通用!) 封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现. 继承:很好的实现 ...

  5. C++面向对象三大特性

    面向对象三大特性 继承 public protected private public继承 public protected 不可见 private继承 private private 不可见 pro ...

  6. JAVA基础——面向对象三大特性:封装、继承、多态

    JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据. ...

  7. day20面向对象三大特性 , 类嵌套

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 1.简述面向对象三大特性并用代码表示."""封装:class Account: ...

  8. python 面向对象(三大特性)

    python 面向对象(初级) (思维导图 ↑↑↑↑↑) 概述: 面向过程:根据业务逻辑从上到下垒代码. 函数式:将某功能代码封装至函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类 ...

  9. python 面向对象三大特性(封装 多态 继承)

    今天我们来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)注:Java和C#来说只支持面向对象编程,而python比较灵活即支持面 ...

  10. python面向对象三大特性

    面向对象的三大特性: 封装.继承和多态 一.封装 封装,顾名思义就是将内容封装到某个地方,以后可以直接调用被封装到某处的内容. - 将内容封装到某处 - 从某处调用被封装的内容 第一步,将内容封装到某 ...

随机推荐

  1. CPU frequency and voltage scaling code in the Linux(TM) kernel

    CPU frequency and voltage scaling code in the Linux(TM) kernel CPU frequency scaling Using CPUfreq G ...

  2. flask_关注者,联系人和好友

    在这节我们实现的功能比较复杂,就是实现用户"关注"和"取消关注"的功能. 一个用户可以关注多个其他的用户,一个用户也可以被其他多个用户所关注,这样看的话,在数据 ...

  3. Java学习笔记 03 数组

    一.数组的创建和使用 数组的创建和使用 >>创建方法1:先声明,再用new关键字分配内存(使用new关键字分配内存,整形数组中各个元素的初始值都为0) String str[]; str= ...

  4. 通过json数据进行传递调用

    最近在弄andriod的程序,需要调用web服务器上的数据,服务采用C#写的,并部署在iis服务器上.我们可以像.NET那样调用服务那,利用andriod库自带的HttpPost和HttpGet类来调 ...

  5. DB_oracle学习笔记_概念分析

    概念分析: 1.       数据库(Database): 数据库是一个文件集合,包括数据文件,临时文件,重做日志文件和控制文件.也可以说数据库是物理操作系统文件或磁盘集合.数据库可以由多个实例(sc ...

  6. mingw编译rtmp库

    下载rtmpdump-2.4 进到里面的librtmp目录下面,执行命令:make SYS=mingw CRYPTO= 这样就编译成功静态库和动态库,如何安装到/usr/local/下面? 执行命令: ...

  7. Extjs的学习及MIS系统实践应用(系列文章)

    本系列文章从Extjs的实际运用出发,结合系统开发的实践经验,详细解释Extjs的基本控件及控件扩展的用法,和在平时的学习运用中一步一步查阅的资料.积累经验的集锦.标题及链接奉上,用一个小程序,开启了 ...

  8. 关于css3媒体查询和响应式布局

    响应式设计 响应式设计可根据所显示的屏幕大小而改变, 它呈现的每个屏幕看起来并不相同.按照可用的屏幕属性,响应式设计提供了 UI 的最佳效果. 例如,如果网站布局上有一个占据 25% 的屏幕宽度的侧边 ...

  9. 前台传参数时间类型不匹配:type 'java.lang.String' to required type 'java.util.Date' for property 'createDate'

    springMVC action接收参数: org.springframework.validation.BindException: org.springframework.validation.B ...

  10. MySQL DELETE语句和TRUNCATE TABLE语句的区别

    MySQL DELETE语句和TRUNCATE TABLE语句的区别 2010-10-08 16:05 佚名 互联网 字号:T | T 在MySQL数据库中,DELETE语句和TRUNCATE TAB ...