分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

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

发布时间:2023-09-06 02:33责任编辑:彭小芳关键词:PHP面向对象

l 基本的介绍

(1) 当我们去使用不可以访问的属性时,系统就会调用__get方法.

(2) 不可以访问的属性指的是(1 . 该属性不存在 2. 直接访问了protected或者private属性)

(3) 当程序员去给不可以访问的属性直接赋值,系统就会调用__set方法

l 举例说明

需求是: 如果对象有一个成员变量是private、protectd的,我希望在在类的外部通过 : $对象名->变量名的方式来赋值和取值,怎么办?

代码如下

<?php ???header(‘content-type:text/html;charset=utf-8‘); ???//__get 和 __set ???class Monkey{ ???????public $name; ???????protected $food; ???????public function __construct($name, $food){ ???????????$this->name = $name; ???????????$this->food = $food; ???????} ???????//魔术方法 __get ???????//1. 魔术方法名字是固定,系统提供 ???????//2. $pro_name 是形式参数,表示属性名 ???????public function __get($pro_name){ ???????// ???????????echo ‘<br> pro_name ‘ . $pro_name; ???????????????????????//做一个判断
???????????if(property_exists($this, $pro_name)){ ???????????????return $this->$pro_name; ???????????}else{ ???????????????return ‘没有该属性,无法返回!‘; ???????????} ???????} ???????//魔术方法 __set ???????//1. 魔术方法名字是固定,系统提供 ???????//2. $pro_name 是形式参数,表示属性名, $pro_val 是属性值 ???????public function __set($pro_name, $pro_val){ ???????????????????//echo ‘<br> $pro_name = ‘ . $pro_name . ‘ pro_val ‘ . $pro_val; ???????????//判断属性是否存在 ???????????if(property_exists($this, $pro_name)){ ???????????????$this->$pro_name = $pro_val; ???????????}else{ ???????????????return ‘属性不存在,无法赋值‘; ???????????} ???????} ???} ???//创建对象 ???$monkey1 = new Monkey(‘妖猴‘, ‘小孩‘); ???echo ‘<br> 猴子名字是 ‘ . $monkey1->name; ???//需求 ???//因为 food是不可访问的属性(protected) ???echo ‘<br> 猴子喜欢吃 ‘ . $monkey1->food; ???//修改猴子的名字和食物 ???$monkey1->name = ‘猴妖‘; ???//在默认情况下,不能直接给一个protected属性赋值, 会触发 ???//__set魔术方法. ???$monkey1->food = ‘桃子‘; ???echo ‘<br> 新的值是 <br>‘; ???echo ‘<br> 猴子名字是 ‘ . $monkey1->name; ???//需求: ???echo ‘<br> 猴子喜欢吃 ‘ . $monkey1->food;

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

原文地址:https://www.cnblogs.com/lsqbk/p/10386457.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved