PHP中的魔术变量小结

PHP中的魔术变量小结

PHP中,有不少很好用的魔术变量,用好之,能事半功倍,下面小结之:

1 _LINE_

显示当前代码的行数:

echo "This is line number : ". __LINE__;

2 _FILE_

显示当前文件的路径

3 _METHOD_

显示当前方法的名,比如

class Magicconstant

{

function __construct()

{

echo "This is function a";

}

function b()

{

echo "<br/>";

echo "This is function b";

echo "<br/>";

echo __METHOD__;

}

}

$cm = new Magicconstant();

$cm->b();

显示

This is function a

This is function b

Magicconstant::b

4 _FUNCTION_

显示当前所在函数的名

function b()

{

echo "<br/>";

echo "This is function b";

echo "<br/>";

echo __FUNCTION__;

}

输出:

This is function b

Magicconstant::b

5 _DIR_

显示当前目录名,如

echo "The directory name is : ". __DIR__;

输出:

The directory name is : D:\wamp\www

6 _CLASS_

显示当前的类

class Magicconstant

{

function __construct()

{

echo "The class name is : ".__CLASS__;

}

}

$cm = new Magicconstant();

显示:

The class name is : Magicconstant

7 _NAMESPACE_

显示当前命名空间

namespace MagicConstant

{

echo "The namespace is : ".__NAMESPACE__;

}

输出:

The namespace is : MagicConstant

8 _sleep_

_sleep_用在将类序列化之前,

<?php

class User

{

public $userName = ‘‘;

public $userAddress = ‘‘;

public $userPhone = ‘‘;

public function setName($name=‘‘)

{

$this->userName = $name;

}

function setAddress($address=‘‘)

{

$this->userAddress = $address;

}

function setPhone($phone=‘‘)

{

$this->userPhone = $phone;

}

function __sleep()

{

return array(‘userAddress‘,‘userPhone‘);

// This will serialize only address and Phone number but not Name

}

}

?>

<?php

$User = new User();

$User->setName(‘Avinash‘);

$User->setAddress(‘Address Here‘);

$User->setPhone(‘1234567890‘);

$serialData = serialize($User);

echo $serialData;

?>

OutPut: O:4:"User":2:{s:11:"userAddress";s:12:"Address Here";s:9:"userPhone";s:10:"1234567890";}

程序运行时, serialize() 检查类中是否有 __sleep() ,如果有,则该函数将在任何序列化之前运行.
该函数必须返回一个需要进行序列化保存的成员属性数组,并且只序列化该函数返回的这些成员属性. 该函数有两个作用: 第一.
在序列化之前,关闭对象可能具有的任何数据库连接等. 第二.
指定对象中需要被序列化的成员属性,如果某个属性比较大而不需要储存下来,可以不把它写进__sleep()要返回的数组中,这样该属性就不会被序列化

又如:

class Test {

public $mySecret; //我的秘密不想让人知道

public function __construct($secret) {

$this->mySecret = $secret;

}

public function __sleep() {

$this->mySecret = "你休想知道我的秘密!";

return array(‘mySecret‘); //一定要返回变量,不然返回的是个空,所以序列化也就没有东西了。

}

}

$test = new Test("我的心里话 我爱某某某");

echo serialize($test); //输出 O:4:"Test":1:{s:8:"mySecret";s:28:"你休想知道我的秘密!";}

_wakeup_

用在反序列化时:

<?php

class User

{

public $userName = ‘‘;

public $userAddress = ‘‘;

public $userPhone = ‘‘;

public function setName($name=‘‘)

{

$this->userName = $name;

}

function setAddress($address=‘‘)

{

$this->userAddress = $address;

}

function setPhone($phone=‘‘)

{

$this->userPhone = $phone;

}

function __sleep()

{

return array(‘userAddress‘,‘userPhone‘);

// This will serialize only address and Phone number but not Name

}

function __wakeup()

{

echo "In Wakeup function"."<br/>";

}

}

?>

<?php

$User = new User();

$User->setName(‘Avinash‘);

$User->setAddress(‘Address Here‘);

$User->setPhone(‘1234567890‘);

$serialData = serialize($User);

echo $serialData;

echo "<br/>";

var_dump(unserialize($serialData));

?>

Output:

In Wakeup function

object(User)#2 (3) {

["userName"]=>

string(0) ""

["userAddress"]=>

string(12) "Address Here"

["userPhone"]=>

string(10) "1234567890"

}

时间: 2024-11-07 22:09:03

PHP中的魔术变量小结的相关文章

PHP中的魔术变量

PHP中的魔术变量是可变的值,举个例子 比如__LINE__这个魔术变量,可以根据在文档中的位置来显示自身在第几行! 代码如下: 1 <?php 2 echo "__LINE在第“".__LINE__."行!"; 3 ?> __LINE__魔术变量 常见的魔术变量有__LINE__,__FILE__,__DIR__,__FUNCTION__,__CLASS__,TRAIT__,__METHOD__,__NAMESPACE__等等.

PHP 中常用的魔术变量

引言 PHP 向它运行的任何脚本提供了大量的预定义常量. 魔术变量 __LINE__ 文件中的当前行号. __FILE__ 文件的完整路径和文件名. 如果用在被包含文件中,则返回被包含的文件名. __DIR__ 文件所在的目录. 如果用在被包括文件中,则返回被包括的文件所在的目录. __FUNCTION__ 函数名称. __CLASS__ 类的名称. __TRAIT__ Trait 的名字. __METHOD__ 类的方法名. __NAMESPACE__ 当前命名空间的名称. 原文地址:http

PHP获取目录和的方法通过魔术变量;通过超级全局变量;通过相关函数等等:

1 <?php 2 /** 3 * PHP获取路径或目录实现 4 * @link http://www.phpddt.com 5 */ 6 7 //魔术变量,获取当前文件的绝对路径 8 echo "__FILE__: ========> ".__FILE__; 9 echo '<br/>'; 10 11 //魔术变量,获取当前脚本的目录 12 echo "__DIR__: ========> ".__DIR__; 13 echo '&l

PHP超级全局变量、魔术变量和魔术函数

PHP在设计的时候已经预定义了9个超级全局变量.8个魔术变量和13魔术函数,这些变量和函数可以在脚本的任何地方不用声明就可以使用. 在PHP开发会频繁的使用这些变量和函数,这些变量和函数可以方便的帮我们解决很多问题.下面详细的讲解下PHP中的超级全局变量.魔术变量和魔术函数. PHP超级全局变量(9个) $GLOBALS 储存全局作用域中的变量 $_SERVER 获取服务器相关信息 $_REQUEST 获取POST和GET请求的参数 $_POST 获取表单的POST请求参数 $_GET 获取表单

PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep

PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload 1.__get.__set这两个方法是为在类和他们的父类中没有声明的属性而设计的__get( $property ) 当调用一个未定义的属性时访问此方法__set( $proper

eclipse中使用javap工具小结

关于javap的功能,百度百科上是这么解释的: javap javap是jdk自带的一个工具,可以反编译,也可以查看java编译器生成的字节码,是分析代码的一个好工具. 简单明了,大多时候真正的开发环境为linux系统,但是在windows下开发的时候又不习惯dos窗口的化,eclipse为我们提供了 javap的详细使用: 我们能够在eclipse中使用javap工具,我们有必要了解一下在eclipse中的Variables这个东西.这个英文单词的意思是变量集合的意思,意思就是我们以某些简短的

PHP 魔术变量

PHP 魔术变量 PHP 向它运行的任何脚本提供了大量的预定义常量. 不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了. 有八个魔术常量它们的值随着它们在代码中的位置改变而改变. 例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定.这些特殊的常量不区分大小写,如下: __LINE__ 文件中的当前行号. 实例: <?php echo '这是第 “ ' . __LINE__ . ' ” 行'; ?> 以上实例输出结果为:

PHP_007 魔术变量和魔术函数

魔术变量 PHP 向它运行的任何脚本提供了大量的预定义常量. 不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了. 有八个魔术常量它们的值随着它们在代码中的位置改变而改变. 例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定.这些特殊的常量不区分大小写,如下: __LINE__ 文件中的当前行号. 实例: <?php echo '这是第 " '  . __LINE__ . ' " 行'; ?> 以上实

php的魔术变量是什么意思

PHP 魔术变量 PHP 向它运行的任何脚本提供了大量的预定义常量. 不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了. 有八个魔术常量它们的值随着它们在代码中的位置改变而改变. 例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定.这些特殊的常量不区分大小写,如下: __LINE__ 文件中的当前行号. 实例 <?php echo '这是第 " ' . __LINE__ . ' " 行'; ?> 以