面向对象基础和面向对象的三大特性之一:封装(20161024)

Posted 5572

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象基础和面向对象的三大特性之一:封装(20161024)相关的知识,希望对你有一定的参考价值。

面向对象

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
<?php

//定义数组
/*$attr = array();
echo $attr;*/
//$attr[0] = 1;
//索引数组
//$attr = array(1,2,3,4);
//关联数组
//$attr = array("code"=>"p001","name"=>"张三");

//二维数组
/*$attr = array(
    array(),
    array()
);*/

//数组遍历

//for循环遍历
/*for($i=0;$i<count($attr);$i++)
{
    $attr[$i];
}*/

//foreach遍历
/*foreach($attr as $v)
{
    $v;
}
foreach($attr as $k=>$v)
{
    $k;$v;
}*/

//$attr = array(1,2,3,4,5,2);
/*    放在别的语言里面foreach遍历数组和集合的情况下不能删除和添加内容
foreach($attr as $k=>$v)
{
    if($v==3)
    {
        unset($attr[$k]);//删除元素
    }
}
$attr = array_values($attr); //重新索引
var_dump($attr);*/

//each()和list()方法遍历
//var_dump(each($attr));
//list($a,$b)=$attr;  取前两个
//echo $b;

//指针遍历
//echo current($attr); 
//echo key($attr);
//next($attr);
//prev($attr);
//end($attr);
//reset($attr);

//var_dump(in_array(9,$attr));//判断某一个值是否在数组里面存在
//var_dump(array_reverse($attr));//翻转数组
//var_dump(array_unique($attr)); //去重
//var_dump(array_count($attr));//取数组长度
//unset($arr[0])//删除数组的某个值
//array_values($arr)//重新索引
//$attr1 = array(9,10);
//var_dump(array_merge($attr,$attr1));//合并数组
//array_push($attr,10); //添加元素到数组,返回值不是新的数组
//var_dump($attr);
//$attr[]=11; //添加元素到数组
//var_dump($attr);


//面向对象
//面向过程
//$a = 10;
//$b = 15;
//echo $a+$b;

//面向对象
//1.什么叫做对象
//一切皆为对象
//2.什么叫做类
//由众多对象的抽象

//做类
    
/*class Ren
    //  class 类名(首字母大写)  class是用来定义类的
{
    //通过变量和方法来描述人类的特征
    
    //成员变量和成员方法总和起来叫做类的成员
    
    //成员变量    类里面的普通成员是属于对象的
    public $name;
    public $sex;
    
    //构造方法
    function __construct($n)    //统一的构造方法名
    {
        //$sex = $n; //错误    public $sex;里的$sex是类的、抽象的,这里的$sex是对象的、具体的
        //$this关键字,在类里面代表该对象,谁用就代表谁
        $this->sex =$n; //正确
    }
    
    //成员方法
    public function Speak()
    {
        echo "正在讲话";
    }
}

$r = new Ren("男"); //实例化对象    对对象初始化

//object    类,对象

var_dump($r);

$r1 = new Ren("女");
var_dump($r1);*/

//构造方法,始终存在,如果不写也是存在的

//var_dump($r);
//$r->name = "李四"; //赋值    其他语言都是点
//echo $r->name; //取值
//var_dump($r);
//$r->Speak();
//$r1 = new Ren(); //实例化对象
//$r1->name = "数据";

//var_dump($r==$r1);

//每一个对象都是一个独立的个体,都不一样

//访问修饰符
//public:代表公有的,在任何地方都可以访问
//protected:代表受保护的,只能在该类或该类的子类中访问
//private:代表私有的,只能在该类中访问


?>


</body>
</html>
1024morningtest.php

 

封装

研究一个类,要先看它的构造方法

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
<?php

class Ren
{
    private $name;
    private $sex;
    private $age; //年龄必须在18-50之间
    
    function __construct($v)//构造方法
    {
        $this->sex = $v;
    }
    //魔术方法 以双下划线打头
    //魔术方法set
    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;
    }
    
    /*//设置age的值
    function setage($a)
    {
        if($a>=18 && $a<=50)
        {
            $this->age = $a;
        }
    }
    //获取age的值
    function getage()
    {
        return $this->age;
    }*/
    
    function say()
    {    
        echo "hello"; 
    }
    
    //析构方法    在对象释放的时候执行,自动调用;如果连接数据库的话,可以在里面写断开连接
    function __destruct()
    {
        echo "这是一个析构方法";
    }
    
    function __tostring()
    {
        return "这个类是人类";
        
        //可以用来输出对象,比如介绍功能
    }
    
    
}

$r = new Ren("男");

//$r->setage(20);
//echo $r->getage();

$r->say();
//$r->age = 30;        等价于    $r->__set("age",20);

//echo $r->age;

//$r->__get("age");

//$r->__set("age",20);

var_dump($r);

//构造方法:写法特殊,执行时间特殊

//OOP(面向对象)三大特性:封装,继承,多态

//封装的目的:为了让类更安全
//封装的做法:
//1.类里面的成员变量做为private
//2.使用成员方法来间接访问成员变量
//3.在该方法里面加限制条件

//php类里面不允许出现同名方法,但是

//函数重载
//在类里面写多个同名方法来实现不同功能
/*public string Show()
{
    return "显示";
}
public string Show(string a)
{
    return a+"显示";
}
public string Show(string a,string b)
{
    return a+b+"显示";
}
public string Show(int b)
{
    return b+"数字";
}*/

//1.函数名必须相同
//2.参数个数不同或参数类型不同

//例子:求两个圆之间的阴影面积
/*$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);
$r2 = new Yuan(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();












?>



</body>
</html>
1024afternoontest.php

 

以上是关于面向对象基础和面向对象的三大特性之一:封装(20161024)的主要内容,如果未能解决你的问题,请参考以下文章

面向对象三大特性五大原则

面向对象 三大特性 五大原则

面向对象三大基本特性,五大基本原则

面向对象三大基本特性,五大基本原则

面向对象三大基本特性,五大基本原则

面向对象三大基本特性,五大基本原则