魔术方法__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;

原文地址:https://www.cnblogs.com/zuichumx0826/p/9152962.html

时间: 2024-10-12 10:27:44

魔术方法__get()和set函数的相关文章

魔术方法__get()

什么是魔术方法呢? 在PHP中以两个下划线开头的方法,被称为"魔术方法"(Magic methods).比如之前讲过的__construct(), __destruct (), __clone(),以及__call(),,__get(), __set(),__sleep(), __wakeup(), __toString(), __autoload()等,都是魔术方法. 如果希望PHP调用这些魔术方法,首先必须在类中定义,否则PHP不会执行未创建的魔术方法.大理石构件来图加工 注意:

PHP 对象 魔术方法 __get __set __isset __unset

class Person{     private $age = 20;     private $sex = 'male';     //__get()自动调用,是在直接访问私有成员时,自动调用!一个参数 属性值     function __get($value){         return $this->$value;     }     //__set()自动调用,是在直接设置私有属性值时,一个参数是属性名,一个参数是属性值     function __set($name,$val

详解php的魔术方法__get()和__set()

先看看php官方文档的解释:__set() is run when writing data to inaccessible properties.__get() is utilized for reading data from inaccessible properties. 究竟用中文怎么翻译呢?inaccessible :n. 难达到:难接近:无法理解.有代码有真相: <?php error_reporting(E_ALL); class stu{ private $a; private

PHP 魔术方法 __get __set (二)

慢慢长寻夜,明月高空挂 __get() - 读取不可访问属性的值时,__get() 会被调用 __set() - 在给不可访问属性赋值时,__set() 会被调用 <?php /** * 清晰的认识__get() __set() */ class Example { //公有的属性 public $public = 'pub' ; //受保护的 - 子类中该属性可用 protected $protected = 'pro'; //私有的 - 只能此类使用此属性 private $private

php 魔术方法__get()和__set()理解

__get()方法,官方手册上是这样解释的 : ' 当调用(自己加的:或设置|赋值)当前环境下未定义或不可见的类属性或方法时,重载方法会被调用.本节后面将使用"不可访问属性(inaccessible properties)"和"不可访问方法(inaccessible methods)"来称呼这些未定义或不可见的类属性或方法'.'未定义'容易理解.我们知道类权限控制有三个关键字分别是'public','private','protected',其中除了'public'

PHP面向对象魔术方法之__get 和 __set函数

l 基本的介绍 (1) 当我们去使用不可以访问的属性时,系统就会调用__get方法. (2) 不可以访问的属性指的是(1 . 该属性不存在 2. 直接访问了protected或者private属性) (3) 当程序员去给不可以访问的属性直接赋值,系统就会调用__set方法 l 举例说明 需求是: 如果对象有一个成员变量是private.protectd的,我希望在在类的外部通过 : $对象名->变量名的方式来赋值和取值,怎么办? 代码如下 <?php header('content-type:

HP叫魔术方法的函数

PHP5.0后,php面向对象提成更多方法,使得php更加的强大!! 一些在PHP叫魔术方法的函数,在这里介绍一下:其实在一般的应用中,我们都需要用到他们!! 1.__construct() 当实例化一个对象的时候,这个对象的这个方法首先被调用. Java代码 class Test { function __construct() { echo "before"; } } $t = new Test(); class Test { function __construct() { ec

php -- 魔术方法 之 获取属性:__get()

属性重载:当访问一个不存在或者权限不够的属性的时候,能够触发一系列的魔术方法,就叫做属性重载 __get():获取不存在或者权限不够的属性的时候会自动触发 <?php header('Content-type:text/html;charset=utf-8'); echo '<pre>'; //PHP属性重载 class Person{ //属性 public $name; protected $money; private $age; //构造方法 public function __

php中常用到的魔术方法

PHP面向对象中有很多功能很强大,不得不说的就是魔术方法了.今天抽出时间记录几个比较常用的魔术方法: 1.__construct 这是构造函数,指当一个类被实例化的时候就会自动调用的函数.那我们可以在这里初始化变量的值.例如: class Score { public $chinese; public $english; public $math; public function __construct($chinese=100,$english=99,$math=98) { $this->ch