PHP 面向对象
封装与不封装的区别: 未封装 时 外部随意更改数据 数据 不需要判定 就可以执行 外部直接操作数据
封装: 外部同样可以对数据更改,但需要 调用 类里面的 函数 外部间接操作数据 (间接调用并且 内部进行判定后方可执行)
原则上成员变量 私有 成员函数公有
类 : 成员变量 成员属性 成员方法
面向对象的三大特性: 封装 继承 多态
封装作用: 使数据更加安全
封装的方法: 1.首先使变量私有 private 2. 类里面做方法 间接访问 成员变量 3.方法里面加控制(
在方法里面加控制(仿制外界随便用){赋值和取值 分别为两个方法(函数)return注意}
)
------------------------------------------------------------------------------------------------------------------
例题
return 应用 封装 : 1. 私有 private 2. 类里面构造方法 间接访问 成员变量
1.以下两个例题 注意 构造函数 的区别(两种方法)
封装:
class people
{
private $name;
private $sex;
private $age;
function __construct($a,$b,$c)
{
$this->name=$a;
$this->age=$b;
$this->sex=$c;
}
private function leftLeg()
{
return "迈左腿";
}
private function RightLeg()
{
return "迈右腿";
}
function run()
{
echo $this->name."在走路".$this->leftLeg().$this->RightLeg(); } } $paobu=new people("黄牛",19,"男");
$paobu->run() 输出结果:黄牛在走路迈左腿迈右腿
私有函数 private 应用
class people
{
private $name;
private $sex;
private $age;
function __construct($a="黄牛2",$b="19",$c="男")
{
$this->name=$a;
$this->age=$b;
$this->sex=$c;
}
private function leftLeg()
{
return "迈左腿";
}
private function RightLeg()
{
return "迈右腿";
}
function run()
{
echo $this->name."在走路".$this->leftLeg().$this->RightLeg(); } } $paobu=new people();//注意构造函数
$paobu->run()
注意构造函数和 上面例题的区别
2.封装方法1 转化为私有 2. 类里面构建方法 外部 通过方法对 变量进行 获取或者 赋值 (构建两个方法)
class ren
{
private $name;
private $age;
private $nation; function __construct($a,$c)
{
$this->name=$a; $this->nation=$c; }
//创建方法 用于修改年龄(在外界)
function set($ll)
{
//加控制是否满足条件
if( $ll>10&&$ll<50)
{
$this->age=$ll;
echo "我叫".$this->name."今年".$this->age."岁".$this->nation; }
}
//创建方法来用 于取值 获取
function get()
{
return $this->age;
} } $renmen=new ren("张","汉族");
$renmen->set(20);
echo $renmen->get(); //获取年龄
方法1 类里面构建两个方法
封装 方法二: 常用(重要)__set($a,$b) 方法 和__get($p) 方法 详见下面例题 注意写参数 {该方法只写在类里面} 使用时 默认自动调用 其他书写和非封装书写方式一样
魔术方法内部不需要返回值 $this->name="名字"; 这里的那么需要手写不提示
class Ren
{
public $code; //人员代号
private $name; //人员名称
private $sex; //人员性别
private $age; //人员年龄,必须在18-50周岁之间 //构造方法,用来初始化性别
function __construct($s)
{
$this->sex = $s;
}
function __set($n,$v)//前面是 名称 后面是 值
{
if($n=="age")
{
if($v>18 && $v<50)
{
$this->$n = $v;
}
}
else
{
$this->$n = $v;
} } //__get魔术方法,用来取变量值的
function __get($n)
{
return $this->$n;
}
} //造对象
$r = new Ren("男");
$r->age = 30; //自动调用__set()方法,将变量名当做第一个参数,将等号右边的值当做第二个参数
$r->name = "张三";
echo $r->sex; //自动调用__get()方法,将变量名当做参数
var_dump($r);
----------------------------------------------结果
男
object(Ren)[1]
public 'code' => null
private 'name' => string '张三' (length=6)
private 'sex' => string '男' (length=3)
private 'age' => int 30
方法二: 调用魔术方法 写入魔术方法后 以后自动调用(代码和为封装一样使用)
3.返回 类名 连续 (说不明白直接看例题)
class Dog
{
private $name; function Jiao()
{
echo $this->name."在叫";
} function SetName($n)
{
$this->name = $n;
return $this;// 注意这里
} } $d = new Dog();
$d->SetName("旺财")->Jiao()//注意这里
例题(重要)
继承:
1.父类
2.子类
子类可以继承父类的一切(有的时候需要自己亲自打上 并不提示 如下面 注释处)
如果子类对父类的方法进行重写 但是 在子类中还需要 父类的方法 使用 parent ::say() 详细如下
重写:override
特点:单继承,一个子类只能有一个父类,一个父类可以派生多个子类
class Ren
{
public $name; function Say()
{
echo $this->name."正在讲话";
}
} class China extends Ren// extends
{
//子类对父类的方法进行重写
function Say()
{
parent::Say();
/*子类中调用父类的成员 parent ::say();在子类中使用 父类的 say 方法*/
echo "你好";
} function Run()
{
echo $this->name."正在跑步";//
}
} class America extends Ren
{
//子类对父类的方法进行重写
function Say()
{
echo "hello";
}
}
$c = new China();
$c->Say(); //输出 正在讲话 你好
$a = new America();
$a->Say(); //hello
var_dump($c);
多态:
3.多态(以下是对强类型语言中讲解多态 弱类型语言 几乎看不出来)
当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,父类引用在调用该方法的时候表现出的不同,称为多态
运行多态
条件
1.要有继承
2.父类引用指向子类实例
3.要有重写
4.调重写的方法
关键词 重写:override
overload(重载)(多态的一种,编译多态)
当父类引用指向子类实例的时候, 由于子类对父类的的方法进行了重写,父类引用在调用该方法的时候表现出的不同
可以使 类里面的某个方法产生多种效果, 根据传入参数的不同, 可以执行不同的逻辑 例如: rand() 根据传入不同值而产生不同的效果
//3.多态
//当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,父类引用在调用该方法的时候表现出的不同,称为多态
//运行多态 //条件
//1.要有继承
//2.父类引用指向子类实例
//3.要有重写
//4.调重写的方法 //父类
/* class Ren
{
public virtual string Say()
{
return "说话";
}
} //子类
class China : Ren
{
public override string Say()
{
return "你好";
}
}
//子类
class America : Ren
{
public override string Say()
{
return "hello";
}
} //父类引用r指向子类实例
Ren r = new America();
MessageBox.Show(r.Say()); r = new China();
MessageBox.Show(r.Say()); //子类的对象可以代替父类的对象
America a = new America();
MessageBox.Show(Eat(a));
//怪兽吃人,需要一个人的参数
public string Eat(Ren r)
{
return "这个人味道不错!";
}
多态(强类型语言)
overload 重载
可以使类里面的某个方法产生多种效果,根据传入的参数不同,可以执行不同的逻辑
也是多态的一种,编译多态
class Test
{
public string show()
{
return "0参";
}
public string show(string s)
{
return "1参";
}
public string show(string s,string a)
{
return "2参";
}
} Test t = new Test(); t.show("a","b");
onload重载(强类型语言)
<?php
class ren
{
private $name;
private $age;
private $nation; function __construct($a,$b,$c)
{
$this->name=$a;
$this->age=$b;
$this->nation=$c; }
function shu()
{ return "我叫".$this->name."今年".$this->age."岁".$this->nation;
}
} $renmen=new ren("张",18,"汉族");
echo $renmen->shu();
?>
输出拼接字符串
PHP 面向对象的更多相关文章
- angular2系列教程(六)两种pipe:函数式编程与面向对象编程
今天,我们要讲的是angualr2的pipe这个知识点. 例子
- 一起学 Java(二)面向对象
一.方法函数 函数也称为方法,就是定义在类中的具有特定功能的一段独立代码.用于定义功能,提高代码的复用性. 函数的特点1> 定义函数可以将功能代码进行封装,便于对该功能进行复用:2> 函数 ...
- js面向对象学习 - 对象概念及创建对象
原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...
- 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型
前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...
- .NET 基础 一步步 一幕幕[面向对象之对象和类]
对象和类 本篇正式进入面向对象的知识点简述: 何为对象,佛曰:一花一世界,一木一浮生,一草一天堂,一叶一如来,一砂一极乐,一方一净土,一笑一尘缘,一念一清静.可见"万物皆对象". ...
- 简单分析JavaScript中的面向对象
初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方 ...
- Java程序员应该了解的10个面向对象设计原则
面向对象设计原则: 是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorat ...
- JavaScript学习笔记(三)——this、原型、javascript面向对象
一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...
- 带你一分钟理解闭包--js面向对象编程
上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...
- .NET基础拾遗(2)面向对象的实现和异常的处理基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
随机推荐
- 关于StrangeIOC框架
在Unity上进行开发,请先看对其开发模式应用的讨论: http://www.reddit.com/r/Unity3D/comments/1nb06h/unity_design_patterns_an ...
- 几个常用的CV知识点
刚结束一段实习,图像算法工程师.总结一下图像算法的几个基本的操作,图像操作算子各式各样,各显神通,光是滤波filter这一个专题就可以有很多的技巧和功能. 我从做过的两个小项目入手, 简单介绍一下该项 ...
- 动画的使用—View Animation
View Animation定义了下面的四种动画效果: 缩放(scale).位移(translation).旋转(rotation).透明(alpha) 缩放动画: ScaleAnimation( ...
- shell浅谈之十函数
转自:http://blog.csdn.net/taiyang1987912/article/details/39583179 一.简介 Linux Shell编 程中也会使用到函数,函数可以把大的命 ...
- Map工具系列-02-数据迁移工具使用说明
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
- BZOJ4614 [Wf2016]Oil
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- Redis模式匹配删除key
Redis keys命令支持模式匹配,但是del命令不支持模式匹配,有时候需要根据一定的模式来模糊删除key,这时只能结合shell命令来完成了. 具体命令是: redis-cli KEYS &quo ...
- maven安装和配置
一.下载maven maven下载页 里面有一些版本区别,binary比较小,适合直接在项目中使用,source带了源代码,windows系统下载zip后缀的 apache-maven-3.3.9-b ...
- 运维请注意:”非常危险“的Linux命令大全
Linux命令是一种很有趣且有用的东西,但在你不知道会带来什么后果的时候,它又会显得非常危险.所以,在输入某些命令前,请多多检查再敲回车. rm –rf rm –rf是删除文件夹和里面附带内容的一种最 ...
- PHP -- Perl风格正则表达式
1.正则表达式作为一个匹配的模版,是由原子(普通字符,例如a-z),有特殊功能的字符(元字符,例如*.+ 和?等),以及模式修正符三个部分组成.2.在于Perl兼容的正则表达式函数中使用模式时一定要给 ...