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. p2p tcp nat 原理图+源码(原创)

    现今网上p2p的 udp nat穿透 文章 多如牛毛, p2p tcp nat的文章寥寥无几 ,up主研究了几天 终于有所收获,特来向大家分享,请大家多多支持! 1.首先你要有台外网服务器 或者 电信 ...

  2. 你们信不信一句Console.WriteLine就能让你的控制台程序失去响应

    好久没更新博客了,今天是扒衣见君节,难得闲下来就来说说一个最近有趣的发现吧. 首先废话不多说,直接上代码吧 class Program { static void Main(string[] args ...

  3. XML通过XSL格式化的那点事(XML到自定义节点折叠显示)

    引言 有时我们想看下系统生成的XML文件(如XML格式的Project文件),如果文件结构简单,我们浏览器看起来还比较方便,但是随着XML schema复杂后就变得让人头疼啦,单独写一个程序去做展现又 ...

  4. java设计模式之外观模式

    外观模式概念 外观模式又称为门面模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个搞层次接口,使得这一个子系统更加容易使用.这一模式完美的体现了依赖倒转原则和迪米特法则的思想,所以是非常常 ...

  5. 转载文章----十步完全理解SQL

    转载地址:http://blog.jobbole.com/55086/ 很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程 ...

  6. Oozie coordinator 作业自定义的配置的一些方法

    Oozie的coordinator有啥用? The Oozie Coordinator system allows the user to define and execute recurrent a ...

  7. 网格弹簧质点系统模拟(Spring-Mass System by Fast Method)附源码

    弹簧质点模型的求解方法包括显式欧拉积分和隐式欧拉积分等方法,其中显式欧拉积分求解快速,但积分步长小,两个可视帧之间需要多次积分,而隐式欧拉积分则需要求解线性方程组,但其稳定性好,能够取较大的积分步长. ...

  8. 项目<<魔兽登录系统>>

    创建魔兽系统相关窗体: 登录窗体(frmLogin) 注册窗体(frmRegister) 主窗体   (frmMain) 实现魔兽登录系统: 登录的界面如下 实现思路: 1.创建一个对象数组,长度为1 ...

  9. 将“早期版本的Windows”改名

    将“早期版本的Windows”改名,并修改系统等待时间 问题描述:       先装Windows XP,再装Windows 7,启动菜单会出现“早期版本的Windows”与“Windows 7”两个 ...

  10. Java开发环境的搭建以及使用eclipse从头一步步创建java项目

    一.java 开发环境的搭建 这里主要说的是在windows 环境下怎么配置环境. 1.首先安装JDK java的sdk简称JDK ,去其官方网站下载最近的JDK即可..http://www.orac ...