魔术方法:

PHP把类中所有以__(两个下划线)开头的方法当成魔术方法,一般建议用户不要将自定义的方法前面加上__作为前缀。魔术方法:

1. __construct()

类的默认构造方法,如果__construct()和与类同名的方法共同出现时,默认调用__construct()而不是同类名方法。一般情况下用户自定义构造方法也会使用__construct()。

2. __destruct()

类的析构函数,当该对象的所有引用都被删除,或者对象被显式销毁时执行。

3. __get($name)

可以简单归纳为:用$object->a的方式读取对象的属性时,如果属性a存在且是public型,那么直接返回该属性的值;如果属性a不存在或者是protected/private这样的不可直接访问的类型,就会调用__get($name)方法并以返回值为准。一般可以使用该方法使外部可限制性地访问内部属性,或者完成类似java中的反射操作。

4. __set($name, $value)

与__get($name)类似,用$object->a = 17的方式给属性赋值时,如果属性a存在且是public型,那么直接给属性a赋值皆可;如果属性a不存在或者是protected/private型,就会调用__set($name, $value)方法。

5. __call($name, $arguments) / __callStatic($name, $arguments)

当调用不存在或者不可访问的方法时,会调用__call($name, $arguments)方法。而当在静态方法中调用不存在或者不可访问的方法时,会调用__callStatic($name, $arguments)方法。

6. __toString()

当打印对象时会被直接调用。如echo $object;

7. __clone()

当对象被拷贝时直接调用。如$a = new Action(); $a = $object;

8. __isset($name) / __unset($name)

对不存在或者不可访问的属性使用isset()或者empty()时,__isset()会被调用;当unset一个不存在或者不可访问的属性时,__unset()会被调用,否则直接unset该属性皆可。

9. __set_state()

用var_export()输出一个对象时,__set_state()会被调用,输出内容以该魔术方法的返回值为准。注:var_export()和var_dump()类似,只是var_export()输出的内容符合php语法。注意使用方法:

$test = new Test();
$b = var_export($test, true);
var_dump($b); class Test { public $a;
public static function __set_state($array) {
$ab = new Test();
$ab->a = 10;
return $ab;
}
}

10. __autoload($name)

实例化一个对象时,如果对应的类不存在,则该方法被调用。注意:该方法是全局函数,参数是类的名称。

11. __sleep() / __wakup()

略。

魔术常量:

1. __LINE__

返回文件中的当前行号。

<span style="font-size:18px;"><?php
echo "这是第 ". __LINE__ ."行";
echo "<br/>";
?></span>

2. __FILE__

返回所在文件的完整路径。包含文件名

<span style="font-size:18px;"><?php
echo "该文件的绝对路径: ". __FILE__;
echo "<br/>";
?></span>

3. __FUNCTION__

返回所在函数名称。

<span style="font-size:18px;"><?php
function Test() {
echo "该函数名为:". __FUNCTION__ ;
echo "<br/>";
}
Test();
?></span>

4. __CLASS__

返回所在类的名称。

<span style="font-size:18px;"><?php
class test {
function show() {
echo "该类名为:". __CLASS__ . "<br>";
echo "该函数名为:". __FUNCTION__ ;
echo "<br/>";
}
}
$t = new test();
$t->show();
?></span>

5. __METHOD__

返回所在类方法的名称。需要注意__METHOD__返回的是"class::function"的形式,而__FUNCTION__则返回"function"的形式。

6.__DIR__

返回文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。不包含文件名。(PHP 5.3.0中新增) =

<span style="font-size:18px;"><?php
echo "该文件位于 ". __DIR__ ."文件夹下";
echo "<br/>";
?></span>

7.__NAMESPACE__

当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

8.__TRAIT__

Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。

php -- 魔术方法、魔术常量 简单介绍的更多相关文章

  1. Atitit.跨平台预定义函数 魔术方法 魔术函数 钩子函数 api兼容性草案 v2 q216  java c# php js.docx

    Atitit.跨平台预定义函数 魔术方法 魔术函数 钩子函数 api兼容性草案 v2 q216  java c# php js.docx 1.1. 预定义函数 魔术方法 魔术函数是什么1 1.2. & ...

  2. JVM体系结构之七:持久代、元空间(Metaspace) 常量池==了解String类的intern()方法、常量池介绍、常量池从Perm-->Heap

    一.intern()定义及使用 相信绝大多数的人不会去用String类的intern方法,打开String类的源码发现这是一个本地方法,定义如下: public native String inter ...

  3. 【细说Java】方法重载的简单介绍

    1. 什么是重载 方法名称相同,但它们的参数类型或个数不同,这样,方法在被调用时编译器就可以根据参数的类型与个数的不同加以区分,这就是方法的重载. 既然可以通过参数类型或参数个数来作为重载条件,那返回 ...

  4. Golang 函数 方法 接口的简单介绍

    函数 函数是基本的代码块,通常我们会将一个功能封装成一个函数,方便我们调用,同时避免代码臃肿复杂. 函数的基本格式 func TestFunc(a int, b string) (int, strin ...

  5. 线程终止的四种方式,interrupt 方法使用的简单介绍。

    一 正常结束. package com.aaa.threaddemo; /* 一 终止线程的四种方式? * 程序运行结束,线程终止. * */ public class ThreadTerminati ...

  6. Python的魔术方法详解

    构造和初始化 __init__我们很熟悉了,它在对象初始化的时候调用,我们一般将它理解为"构造函数". 实际上, 当我们调用x = SomeClass()的时候调用,__init_ ...

  7. php常用的魔术方法

    __construct:构造函数,一旦创建对象都就会自动调用 __call:当调用了未定义的方法时会自动触发 __set:当给类外部不可访问的属性设置值时会自动触发 __get:当获取类外部不可访问的 ...

  8. PHP核心技术——魔术方法

    魔术方法: 魔术方法是以两个下画线开头.具有特殊作用的一些方法,可以看做PHP的"语法糖". set和get方法: class Account{ private $user=1; ...

  9. day25:魔术方法

    目录 1.__del__(析构方法) 2.魔术方法:__str__ 3.魔术方法:__repr__ 4.魔术方法:__call__ 5.魔术方法:__bool__ 6.魔术方法:__add__& ...

随机推荐

  1. random模块(十九)

    1 ).random() 返回0<=n<1之间的随机实数n: 2 ).choice(seq) 从序列seq中返回随机的元素: 3 ).getrandbits(n) 以长整型形式返回n个随机 ...

  2. 如何将Anaconda更新到想要的python版本

    最近用Anaconda比较多,因为它里面的包很全啊.如果下个原生的python,要用的时候得自己一个个装. 但是有些包又互相依赖,一个个装的时候实在很抓狂.懒人就想到了anaconda这种套装集合了. ...

  3. 使用iostat来对linux硬盘IO性能进行检测

    -x显示扩展统计数据 # 每隔1s显示6个统计数据 $ iostat -x 1 6 # 每隔1s显示磁盘sda的6个统计数据 $ iostat -x sda 1 6 # 每隔1s显示设备sda及其分区 ...

  4. DoubleOps.java

    /****************************************************************************** * Compilation: javac ...

  5. JavaEE学习总结(十六)— Servlet

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  6. JavaEE学习总结(十二)—MyEclipse开发工具与HTML

    一.MyEclipse MyEclipse,是在eclipse 基础上加上自己的插件开发而成的功能强大的企业级集成开发环境,主要用于Java.Java EE以及移动应用的开发.MyEclipse的功能 ...

  7. 常用的css文件

    reset.css(几乎每个项目都要引入的css) @charset "utf-8";html{background-color:#fff;color:#000;font-size ...

  8. Hadoop记录-Hadoop shell常用命令

  9. JAVA记录-POST与GET方式区别

    1.get是从服务器上获取数据的一种请求,post是向服务器提交数据的一种请求. 2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到 ...

  10. git 分支branch

    转:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137584003893 ...