文档章节

php类中的魔术方法

wddqing
 wddqing
发布于 2013/04/21 21:58
字数 290
阅读 57
收藏 0

1、__set()和__get()

在访问和修改php类中的私有成员时可以这两个方法,详细可看下面对代码:

class Account{
    private $usr = 1;
    private $pwd = 2;
    public function __set($name,$value){
        echo "Setting $name to $value \r\n";
        $this->$name = $value;
    }

    public function __get($name){
        if(!isset($this->$name)){
            echo "未设置";
            $this->$name="正在为你设置默认值";
        }
        return  $this->$name;
    }
}

$a = new Account();
echo $a->user;
$a->name = 5;
echo $a->name;
echo $a->big;

2、__call()和__callStatic()方法

当访问一个不可访问(未定义,不可见)的方法时,__call()会被调用,第一个参数是调用的方法,第二个是传入对参数数组。__callStatic对应于静态方法。

详细可以看下面的代码:

public function __call($name,$arguments){
		switch (count($arguments)) {
			case '2':
				echo $arguments[0]*$arguments[1],PHP_EOL;
				break;
			case '3':
				echo array_sum($arguments),PHP_EOL;		
				break;
			default:
				echo 'wrong arguments',PHP_EOL;
				break;
		}
	}

3、__toString方法

当使用echo输出一个对象时,会自动调用这个函数,如果类中没有定义这个函数,则使用echo输出对象时会报错。这个方法必须返回一个string。

class Account{
   public $usr = 1;
   private 4pwd = 2;
   public function __toString(){
      return "{$this->user},{$this->pwd}";
   }
}
$a = new Account();
echo $a,PHP_EOL;
print_r($a);

© 著作权归作者所有

wddqing
粉丝 10
博文 25
码字总数 10891
作品 0
广州
程序员
私信 提问
Laravel5.2之PHP重载(overloading)

说明:本文主要讲述PHP中重载概念,由于Laravel框架中经常使用这块知识点,并且PHP的重载概念又与其他OOP语言如JAVA中重载概念不一样,故复习并记录相关知识点。同时,作者会将开发过程中的一...

botkenni
2016/10/24
5
0
PHP中用下划线开头的变量含义

命名的规则 加一个为私有的 加两个一般都是系统默认的,系统预定义的,即所谓: “魔术方法”与“魔术常量” PHP起止为双下划线的常量即为“魔术常量”: LINE文件中的当前行号。 FILE文件的...

linuxjd
2014/09/13
3.2K
1
面向对象学习笔记整理

面向对象学习笔记整理 对象类型在内存中的分配 1:内存结构 栈空间段(后进先出):空间小被CPU访问速度快,用于存放程序中的临时变量,方便用于保存和恢复调用现场,主要存放占用空间小的数...

雨醉风尘
2016/09/02
37
0
PHP之新手自学基础知识(五)——拓展篇之魔术变量及魔术函数

PHP 魔术变量 魔术变量就是指那些根据不同环境有不同的取值,以下介绍的是魔术常量,由于在不同环境有不同的取值所以也叫魔术变量。知道本质是个常量就好了。 PHP 向它运行的任何脚本提供了大...

天谴残魂
2018/01/06
0
0
PHP5中魔术方法

魔术函数 1。construct() 实例化对象时被调用, 当construct和以类名为函数名的函数同时存在时,construct将被调用,另一个不被调用。 2。destruct() 当删除一个对象或对象操作终止时被调用。...

zchd
2014/05/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Replugin借助“UI进程”来快速释放Dex

public static boolean preload(PluginInfo pi) { if (pi == null) { return false; } // 借助“UI进程”来快速释放Dex(见PluginFastInstallProviderProxy的说明) return PluginFastInsta......

Gemini-Lin
48分钟前
4
0
Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
今天
4
0
CSS--属性

一、溢出 当内容多,元素区域小的时候,就会产生溢出效果,默认是纵向溢出 横向溢出:在内容和容器之间再套一层容器,并且内部容器要比外部容器宽 属性:overflow/overflow-x/overflow-y 取值...

wytao1995
今天
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
7
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部