zoukankan      html  css  js  c++  java
  • 魔术方法__get()和set函数

    基本介绍

    1.当去使用可访问的属性时,系统就会调用__get方法    不可访问属性:该属性不存在   直接访问protected或private属性

    2.当去给不可访问属性赋值时,会调用__set方法

    <?php
    header('content-type:text/html;charset=utf-8');
    class human{
    	public $name;
    	protected $food;
    	function __construct($name,$food){
    		$this->name=$name;
    		$this->food=$food;
    	}
    	//魔术方法
    	//魔术方法名字是固定的系统提供
    	//$pro_name 
    	public function __get($pro_name){
    		if(property_exists($this,$pro_name)){
    			return $this->$pro_name;
    		}
    		else{
    			return "没有该属性";
    		}
    	}
    }
    $wd= new human('温蛋','鸡');
    echo "<br> 名字是".$wd->name;
    echo "<br> 食物是".$wd->food;
    
    <?php
    header('content-type:text/html;charset=utf-8');
    class human{
    	public $name;
    	protected $food;
    	function __construct($name,$food){
    		$this->name=$name;
    		$this->food=$food;
    	}
    	//魔术方法
    	//魔术方法名字是固定的系统提供
    	//$pro_name 是形式参数,表示属性名
    	public function __get($pro_name){
    		
    		if(property_exists($this,$pro_name)){
    			return $this->$pro_name;
    		}
    		else{
    			return "没有该属性";
    		}
    	}
    	//魔术方法
    	//魔术方法名字是固定的系统提供
    	//$pro_name 是形式参数,表示属性名 $pro_val是属性值
    	public function __set($pro_name,$pro_val){
    //		echo $pro_name.$pro_val;
    		if(property_exists($this,$pro_name)){
    			$this->$pro_name=$pro_val;
    		}
    		else{
    				return "没有该属性";
    		}
    	}
    }
    $wd= new human('温蛋','鸡');
    echo "<br> 名字是".$wd->name;
    echo "<br> 食物是".$wd->food; 
    //修改对象名字和食物
    $wd->name="猪";
    //在默认情况下,不能直接给一个protected属性赋值,会触发set魔术方法;
    $wd->food="猪饲料";
    echo "<br />新的值是";
    echo "<br> 名字是".$wd->name;
    echo "<br> 食物是".$wd->food; 
    
    访问访问不到的成员属性,会自动调用__get方法  形参就是成员属性名


    给访问不到的成员属性赋值时,会自动调用__set方法 形参是成员属性名,属性值

    检测私有属性是否被设定 会自动调用__isset()函数

    __unset() 方法用于删除私有属性。

    对象里面成员是公有的,可以直接使用 isset() 函数。如果是私有的成员属性,那就需要在类里面加上一个 __isset() 方法: 

    unset() 函数只能删除对象的公有成员属性,当要删除对象内部的私有成员属性时,需要使用__unset() 方法:

    直接输出对象名时,就会触发魔术方法__toString

    property_exists判断是否存在

    //property_exists(对象名, 属性)
    //1. 先判断该对象是否有这个属性,如果有则返回真.
    //2. 如果该对象没有有这个属性, 则继续判断该对象对应的类是否定义过这个属性,如果定义过仍然返回真,否则才返回假
     
    魔术方法 __call()
    基本介绍;当我们调用一个不可访问的成员方法时,就会自动调用__call()魔术方法    成员方法不存在或者protected 或者 private
    __call(成员方法函数名,参数形式是数组); 两个参数
     
  • 相关阅读:
    [2020多校联考]甲虫
    .eww
    MinGW安装c-c++
    .竖梁上的两个孔最小距离可以是多少呢?PS15D
    .dwg(sw)-exb
    开始学emacs-1
    看jpg和png图片
    .系列化参数关系
    2015计划
    大蚂蚁在64位系统下,右键没有快发的解决方案
  • 原文地址:https://www.cnblogs.com/zuichumx0826/p/9152962.html
Copyright © 2011-2022 走看看