class Ren
{
private $name;
private $sex;
private $age;//年龄必须在18-50岁之间 function __construct($n)
{
$this->sex = $n;
}
//设置age的值
function setage($a)
{
if($a>=18 && $a<=50)
{
$this->age = $a;
}
}
//获取age的值
function getage()
{
return $this->age;
} function _destruct()
{
echo"这是一个析构方法";
} }
$r = new Ren("男"); $r->setage(20); echo $r->getage(); var_dump($r); //封装目的:为了让类更加的安全
//封装的做法:
//1.类里面的成员变量全部做为private
//2.使用成员方法来间接访问成员变量
//3.在该方法里面加限制条件

按照上面的方法用起来很不方便,一个变量要写两个函数,如果变量较多时,要写的函数会更多。

PHP里面有个方法是function __set();

class Ren
{
private $name;
private $sex;
private $age;//年龄必须在18-50岁之间 function __construct($n)
{
$this->sex = $n;
}
function __set($n,$v)//可以给成员变量赋值,括号里面有两个参数,第一个参数是成员变量的名称,第二个是成员变量的值。
{
$this->$n = $v;
}
}
$r = new Ren("男");
//$r->__set("age",20);//按照这种写法还是会比较复杂,每一个都需要写名字。按照下列写法写。
$r->age = 20;
var_dump($r); __set方法特殊在可以自动调用,在给成员变量赋值的时候自动调用function __set($n,$v),把age传给$n,把20传给$v。
上面的只能调用这个方法赋值,没有限制条件,下面代码是封装的最终形式。
class Ren
{
private $name;
private $sex;
private $age;//年龄必须在18-50岁之间 function __construct($n)
{
$this->sex = $n;
}
function __set($n,$v)
{
if($n=="age")
{
if($v>=18 && $v<=50)
{
$this->$n = $v;
}
}
else
{
$this->$n = $v;
}
}
}
$r = new Ren("男");
$r->__set("age",20);
var_dump($r); 一个类里面一个set就够了,如果成员变量多的话可以使用switch...case。

类里面的所有的双下划线的有一个统称,叫做魔术方法。

function __get()

class Ren
{
private $name;
private $sex;
private $age;//年龄必须在18-50岁之间 function __construct($n)
{
$this->sex = $n;
}
function __set($n,$v)//可以给成员变量赋值,括号里面有两个参数,第一个参数是成员变量的名称,第二个是成员变量的值。
{
if($n=="age")
{
if($v>=18 && $v<=50)
{
$this->$n = $v;
}
}
else
{
$this->$n = $v;
}
}
function __get($n)
{
return $this->$n;
}
}
$r->age = 40;
echo $r->age;//这么写会直接调用get方法。把变量名age传到get里面去
//例子:求两个圆之间的阴影面积

//面向过程的方式:

/*$maxr = 20;
$minr = 10;
$mj = 3.14*$maxr*$maxr - 3.14*$minr*$minr; //面向对象的方式:
class Yuan//研究的是圆,类就是圆。
{
//代表半径
public $r;//圆的属性中有半径 function __construct($n)//构造函数
{
$this->r = $n;//给圆的半径赋上取到的值
} //求面积的方法
function MJ()//方法 求圆的面积的通用公式
{
return 3.14*$this->r*$this->r;
}
} $r1 = new Yuan(20);//圆1的半径是20
$r2 = new Yuan(10);//圆2的半径是10 $mianji = $r1->MJ()-$r2->MJ();*/
//例子:计算器
面向过程的方式:
$a = 10;
$b = 5; $jia = $a+$b;
$jian = $a-$b;
$cheng = $a*$b;
$chu = $a/$b; 面向过程的方式:
class jisuan
{
public $a;
public $b; function __construct($n,$m)
{
$this->a = $n;
$this->b = $m;
} function jia()
{
return $this->a+$this->b;
}
function jian()
{
return $this->a-$this->b;
}
function cheng()
{
return $this->a*$this->b;
}
function chu()
{
return $this->a/$this->b;
}
function quyu()
{
return $this->a%$this->b;
}
} $j = new jisuan(10,5);
$j->quyu();

10月24日下午PHP封装的更多相关文章

  1. 2016年10月24日 星期一 --出埃及记 Exodus 19:8

    2016年10月24日 星期一 --出埃及记 Exodus 19:8 The people all responded together, "We will do everything th ...

  2. SPSS 2019年10月24日 今日学习总结

    2019年10月24日今日课上内容1.SPSS掌握基于键值的一对多合并2.掌握重构数据3.掌握汇总功能 内容: 1.基于键值的一对多合并 合并文件 添加变量 合并方法:基于键值的一对多合并 变量 2. ...

  3. Gitbook环境搭建及制作——2019年10月24日

    1.gitbook介绍 GitBook 是一个基于 Node.js 的命令行工具,支持 Markdown 和 AsciiDoc 两种语法格式,可以输出 HTML.PDF.eBook 等格式的电子书.可 ...

  4. 10月28日下午MySQL数据库的增加、删除、查询(匹配数据库登录和可以增、删、查的显示数据库内容的页面))

    一.匹配数据库登录 步骤: 1.做一个普通的登录界面,注意提交方式为post. <!--登录界面--> <form action="chuli.php" meth ...

  5. 10月24日上午PHP面向对象

    面向对象 程序分为两种,一种是面向过程的,另一种是面向对象的.之前的学的都是面向过程的,按部就班的一步一步的按照顺序往下走. 面向对象: 1.什么叫做对象 一切皆为对象(一个对象由一组属性和有权对这些 ...

  6. 10月21日下午PHP常用函数

    函数四要素:返回类型  函数名  参数列表  函数体 //最简单的函数定义方式 function Show() { echo "hello"; } Show();//输出结果为he ...

  7. 10月16日下午MySQL数据库CRUD操作(增加、删除、修改、查询)

    1.MySQL注释语法--,# 2.2.后缀是.sql的文件是数据库查询文件. 3.保存查询. 关闭查询时会弹出提示是否保存,保存的是这段文字,不是表格(只要是执行成功了表格已经建立了).保存以后下次 ...

  8. Week7(10月24日)

    Part I:提问  =========================== 1.数据验证属性的练习. 按要求写出教室和课程的模型类. (1)教室类主键不自动增值,手工输入. (2)教室名字不超过10 ...

  9. 10月30日下午 PHP精确查询(模糊查询、模糊+关键字共同查询)

    1.一个条件的模糊查询 <body> <br /> <form action="main.php" method="post"&g ...

随机推荐

  1. MongoDB学习笔记~Mongo集群和副本集

    回到目录 一些概念 对于Mongo在数据容灾上,推荐的模式是使用副本集模式,它有一个对外的主服务器Primary,还有N个副本服务器Secondary(N>=1,当N=1时,需要有一台仲裁服务器 ...

  2. CentOS安装LNMP环境的基础组件

    注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. 在安装LNMP环境之前,请确保已经使用yum安装了以下各类基础组件(如果系统已自带,还可以考虑yum update下基础组件): ...

  3. android ListView 属性

    android:divider="#fffff" 分割线颜色 android:dividerHeight="1px" 分割线高度 divider 分割线-去掉分 ...

  4. 搞ACM的你伤不起[转自RoBa]------(看一次,笑一次)

    RoBa原创,转载请注明出处  劳资六年前开始搞ACM啊!!!!!!!!!! 从此踏上了尼玛不归路啊!!!!!!!!!!!! 谁特么跟劳资讲算法是程序设计的核心啊!!!!!! 尼玛除了面试题就没见过用 ...

  5. 2016 最佳 Linux 发行版排行榜

    2015年,不管在企业市场还是个人消费市场都是 Linux非常重要的一年.作为一个自2005年起就开始使用 Linux的 Linuxer ,我门见证了 Linux在过去十年的成长.2016 Linux ...

  6. eclipse svn分支与合并操作

    以前做项目的时候没有用过svn的分支合并操作,今天用到了,刚开始还真不会啊.最后查了下就是这么的方便.专门记录下来. 原文来自:http://blog.csdn.net/lisq037/article ...

  7. Java中的序列化Serialable高级详解

    来自[http://blog.csdn.net/jiangwei0910410003/article/details/18989711] 引言 将 Java 对象序列化为二进制文件的 Java 序列化 ...

  8. 全透明Activity

    第一步:在/res/values/styles里面添加如下代码: <style name="translucent"> <item name="andr ...

  9. 一种可实时处理 O(1)复杂度图像去雾算法的实现。

    在我博文的一系列的文章,有不少算法都于去雾有关,比如限制对比度自适应直方图均衡化算法原理.实现及效果.局部自适应自动色阶/对比度算法在图像增强上的应用这两个增强算法都有一定的去雾能力,而最直接的就是& ...

  10. postman使用之一:安装启动篇

    官网介绍:http://www.getpostman.com/docs/ postman是干什么的就不介绍了,本文从postman的安装开始介绍,后续会有其它使用的介绍. 安装: 1.mac app安 ...