php面向对象三大特性之封装性

php面向对象编程的三大特征

①封装 ②继承 ③多态

 

class Account {

     public $blance;

     public $no;

     public function qun(){}

    public function cun(){}

}

 封装

        那么在php中如何实现这种类似的控制呢?

        请大家看一个小程序.(visit1.php),不能随便查看人的年龄,工资等隐私...

class Person{

     public $name;

     private  $age;

     private  $salary;


     function __construc($name,$age,$salary){

         $this->name=$name;

         $this->age=$age;

         $this->salary=$salary
    }
}

php提供了三种访问控制符号.

1.public  表示全局,可以在本类,类外部,子类 中使用

2.protected 表示受到保护, 可以在本类, 子类中使用

3.private 表示私有, 只能在本类使用

这三个控制修饰符号可以对 属性 和 方法修饰

1.如果一个方法没有访问修饰符,则默认是public

2.属性 必须指定访问修饰符

方法之间可以互相调用. 但是需要使用 $this引用

function test11(){
   $this->test12();
}

protected function test12(){
   echo "test12 hello";
}
$p1->test11();

//举例说明:
class Person{
   public $name;
   protected  $age;
   private  $salary;
   function __construct($name,$age,$salary){
          $this->name=$name;
          $this->age=$age;
          $this->salary=$salary;
   }
  //成员方法
  function showInfo(){
         //这里说明在本类中可以使用 public protected 和private 修饰的变量.
         echo $this->name."||".$this->age."||".$this->salary;
    }
}

//创建一个人
$p1=new Person("孙悟空",30,1000);
echo $p1->name;//可以

echo $p1->age;//报错

echo $p1->salary;//报错.

我们现在就想去访问protected 变量或者 private 变量, 通常的做法是提供 public 函数去访问 这些变量. 形式是

public function setXxx($val){}

public function getXxx(){}

public function showInfo(){}

public protected private 可以修饰属性和方法

(1)查看 薪水 (private )

//获取这个人的薪水
public function getSalary($user,$pass){
        if($user=="shunping" && $pass="123"){
              return $this->salary;
        }else{
              return "sorry,你无法看";
       }
}

(2)修改人的年龄

提供了两个函数.

//修改年龄,对输入的值,进行校验.
public function setAge($age){
    if($age>1 && $age<120){
         $this->age=$age;
    }else {
         echo "年龄范围不对";
    }
}

//查看年龄
public function getAge(){
    return $this->age;
}

//创建对象
$p1=new Person( "张三",22,1000);

//输出,查看
echo  $p1->name .'<br/>' ;
//echo  $p1->age;//报错
//echo $p1->salary;//报错
echo $p1->getSalary("李四" ,123);
echo '<br/>';

//修改年龄
$p1->setAge(133);
echo '<br/>';
echo $p1->getAge();

<?php
//创建一个名为Person的类
class Person{
       //属性
       //公共的访问控制修饰符
       public $name;
       //受保护的访问控制修饰符
       protected  $age;
       //私有的的访问控制修饰符
       private  $salary;
       //方法
       //定义了构造方法
       function __construct($iname,$iage,$isalary){
             $this->age =$iage;
             $this->name =$iname;
             $this->salary =$isalary;
      }

       function showInfo(){
             //这个方法说明了在本类中可以使用public,protected,private修饰的变量
             echo $this->age .$this->name.$this-> salary;
      }

       //我们可以通过一个方法来访问protected和private变量
       //获取这个人的薪水
       public  function getSalary($name,$pass){
             if($name=="李四" && $pass=="123"){
                 return $this->salary ;
            } else{
                   echo '对不起,您无法访问!';
            }
      }

       //修改年龄,对输入的值进行校验
       public function setAge($age){
             if ($age>=0 && $age<=120){
                 return $this->age ;
            }else{
                echo'您的年龄不合法!';               
            }
       }

       //获取年龄
       public function getAge(){
             return $this->age ;
       }

       //方法之间的调用 用$this
       function test1(){
             $this->test2();
       }

       private function test2(){
             echo 'test2 hello';
      }
}

//创建对象
$p1=new Person( "张三",22,1000);

//输出,查看
echo  $p1->name .'<br/>' ;
//echo  $p1->age;//报错
//echo $p1->salary;//报错
echo $p1->getSalary("李四" ,123);
echo '<br/>';

//修改年龄
$p1->setAge(133);
echo '<br/>';
echo $p1->getAge();
echo '<br/>';
echo $p1->test1();

?>

还有一种形式, 通过 一对 __set  和 __get方法来操作我们的变量,不推荐.

 

class A{
          private $n1;
          private $n2;
          private $n3;

          //使用__set 方法来管理所有的属性
          public function __set($pro_name,$pro_val){
               $this->pro_name=$pro_val;
          }

          //使用__get 可以获取所有的属性值
          public function  __get($pro_name){
               if(isset($pro_name)){
                    return $this->pro_name;
               }else{
                    return null;
               }
          }

     }


     $a1=new A();
     $a1->n1="hello";
     echo $a1->n1;

     $a1->n2=890;
     echo "||".$a1->n2;

可以直接写一个方法了操作变量

class Peron{
     protected $n1;
     private $n2;
     function showInfo($n1){
       $this->n1=$n1;
       echo $this->n1.”||”$this->n2;
     }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值