• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP中的幻术变量小结

php 搞代码 4年前 (2022-01-24) 32次浏览 已收录 0个评论

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 “
“;
echo “This is function b”;
echo “
“;
echo __METHOD__;
}
}
$cm = new Magicconstant();
$cm->b();

显示
This is function a
This is function b
Magicconstant::b

4 _FUNCTION_
显示当前所在函数的名
function b()
{
echo “
“;
echo “This is function b”;
echo “
“;
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() ,如果有,则该函数将在任何序列化之前运行. 该函

4本文¥来源gao!%daima.com搞$代*!码$网9

搞代gaodaima码

数必须返回一个需要进行序列化保存的成员属性数组,并且只序列化该函数返回的这些成员属性. 该函数有两个作用: 第一. 在序列化之前,关闭对象可能具有的任何数据库连接等. 第二. 指定对象中需要被序列化的成员属性,如果某个属性比较大而不需要储存下来,可以不把它写进__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”.”
“;
}

}
?>
<?php
$User = new User();
$User->setName(‘Avinash’);
$User->setAddress(‘Address Here’);
$User->setPhone(‘1234567890’);

$serialData = serialize($User);
echo $serialData;
echo “
“;
var_dump(unserialize($serialData));
?>

Output:
In Wakeup function
object(User)#2 (3) {
[“userName”]=>
string(0) “”
[“userAddress”]=>
string(12) “Address Here”
[“userPhone”]=>
string(10) “1234567890”
}


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP中的幻术变量小结

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址