当前位置: 首页 > news >正文

悦诗风吟网站建设策划书建筑工程培训机构

悦诗风吟网站建设策划书,建筑工程培训机构,wordpress子目录和多域名,好兄弟给个网站PHP魔术方法 PHP 中的魔术方法是一组特殊的方法#xff0c;它们在特定情况下自动被调用。这些方法的名称都是以两个下划线#xff08;__#xff09;开头。魔术方法提供了一种方式来执行各种高级编程技巧#xff0c;使得对象的行为可以更加灵活和强大。以下是一…PHP魔术方法 PHP 中的魔术方法是一组特殊的方法它们在特定情况下自动被调用。这些方法的名称都是以两个下划线__开头。魔术方法提供了一种方式来执行各种高级编程技巧使得对象的行为可以更加灵活和强大。以下是一些常见的PHP魔术方法 __construct(): 构造函数当一个新对象被创建时调用。__destruct(): 析构函数当一个对象不再被使用时调用。__call($name, $arguments): 当调用一个对象中不存在的方法时调用。__callStatic($name, $arguments): 当调用一个静态方法不存在时调用。__get($name): 当读取一个不可访问的属性时调用。__set($name, $value): 当设置一个不可访问的属性时调用。__isset($name): 当对不可访问的属性调用 isset() 或 empty() 时调用。__unset($name): 当对不可访问的属性调用 unset() 时调用。__sleep(): 在序列化对象之前调用通常用于清理任务或返回数组中的哪些属性需要被序列化。__wakeup(): 在反序列化对象时调用通常用于重新建立数据库连接或执行其他初始化操作。__toString(): 当对象被当作字符串使用时调用例如在 echo 语句中。__invoke(): 当尝试将对象当作函数调用时执行。__set_state($array): 当调用 var_export() 且返回的结果被执行时调用。__clone(): 当对象被克隆时调用。 这些魔术方法提供了对对象生命周期中各种事件的控制以及对对象行为的定制化。正确和恰当地使用这些方法可以使你的代码更加健壮和灵活 掌握PHP魔术方法分为触发时机---功能---参数--返回值 最低要求起码知道触发时机不然对之后pop链的学习影响会很大 很感谢陈腾老师的教导 接下来我会带领大家一一学习PHP魔术方法 接下来都会是代码加解释的形式和大家一起·学习 1.——construct ?phphighlight_file(__FILE__);class User {    public $username;    public function __construct($username) {        $this-username  $username;        echo 触发了构造函数1次 ;    }}$test  new User(benben);$ser  serialize($test);unserialize($ser);?输出触发了构造函数1次 这里是先定义一个类User下面的public是全局变量的意思这里提一下如果使用的是private那就是属于一个私有属性也就是说你只能在User这个类里面使用如果你在外面调用了它肯定是不行的。接下来public function __construct($username) {        $this-username  $username;        echo 触发了构造函数1次 ;    }这里就是一个魔术方法 换句话来说就是user这个类里面有username和一个魔术方法后面的代码就是调用user这个类里面的属性而已 搞懂了代码就好说了$test  new User(benben);这里是实例化对象所以只会在这行代码触发输出“触发了构造函数1次” 这个__construct()魔术方法很简单 触发时机实例化对象时会触发比如$test  new User(benben);)这里就时实例化对象 功能就是提前清理不必要的内容 参数非必要 返回值 2.__destruct() 在对象的所有的引用被删除或者当对象被显示销毁时执行的魔术方法 比如?phphighlight_file(__FILE__);class User {    public function __destruct()    {        echo 触发了析构函数1次.br / ;    }}$test  new User(benben);$ser  serialize($test);unserialize($ser);?触发了析构函数1次 触发了析构函数1次 __destruct() 触发时机对象引用完成或对象被销毁反序列化之后 功能 参数 返回值 来到题目 ?php highlight_file(__FILE__);error_reporting(0); class User {     var $cmd  echo dazhuang666!!; ;     public function __destruct()     {         eval ($this-cmd);     } }$ser  $_GET[benben];unserialize($ser); 拿到这道题目就直接徒手构造就好了benbenO:4:User:1:{s:3:cmd;s:13:system(id);;} 首先是objectUser对应的是四个字符里面只有1个成员属性最后的“;”不要忘记。 直接拿下这里直接反序列化的时候就已经触发了——dstruct() 3._sleep() 触发时机_slee[()先执行序列化之后再执行也就是序列化前调用 功能 参数 返回值 ?phphighlight_file(__FILE__);class User {    const SITE  uusama;    public $username;    public $nickname;    private $password;    public function __construct($username, $nickname, $password)    {        $this-username  $username;        $this-nickname  $nickname;        $this-password  $password;    }    public function __sleep() {        return array(username, nickname);    }}$user  new User(a, b, c);echo serialize($user);?O:4:User:2:{s:8:username;s:1:a;s:8:nickname;s:1:b;} 这串代码的意思是一个对象user还有它的对应属性。 接下来直接_construct魔术方法,因为最下面new User会触发 这个魔术方法但是后面的sleep遇到serialize又会触发魔术方法_sleep()这里先触发——construct()在实例化前触发并且把usernamenicknamepassword为别赋值a,b,c 这里本来应该输出的是三个参数的但是后面的sleep又触发魔术方法结果password就不输出 4._wakeup() 这个在做反序列化unserialize之前触发 触发时机这个在做反序列化unserialize之前触发 功能 参数 返回值返回void ?php highlight_file(__FILE__);error_reporting(0); class User {     const SITE  uusama;     public $username;     public $nickname;     private $password;     private $order;     public function __wakeup() {         system($this-username);     } }$user_ser  $_GET[benben];unserialize($user_ser);? ?benbenO:4:”User”:1:{s:8:”username”;s:2:”id”;} 这里构造1个就好因为_wakeup()过后就只调用username其他几个属性就没有必要写了 Ps反序列化里面对字符串包裹就只能使用双引号单引号不识别 5._tostring() 触发时机把对象被当成字符串调用 功能 参数 返回值 ?phphighlight_file(__FILE__);error_reporting(0);class User {    var $benben  this is test!!;         public function __toString()         {             return 格式不对输出不了!;          }}$test  new User() ;print_r($test);echo br /;echo $test;?User Object ( [benben] this is test!! )格式不对输出不了!(这个命令是 $test)所触发的 把类User实例化并且赋值给$test,此时的$test是个对象调用对象可以使用print_ 或者是var_dump 但是如果使用echo或者print只能调用字符串的方式去调用对象即把对象当成字符串使用此时自动触发tostring() 也就是说后面的echo $test直接当成字符串输出了这里会触发魔术方法tostring() 6._invoke() 触发时机把对象被当成函数调用 功能 参数 返回值 ?phphighlight_file(__FILE__);error_reporting(0);class User {    var $benben  this is test!!;         public function __invoke()         {             echo  它不是个函数!;          }}$test  new User() ;echo $test -benben;echo br /;echo $test() -benben;?this is test!!它不是个函数! 其实跟tostring差不多就是echo $test() -benben这里直接把它当成函数输出导致了魔术方法触发 7._call() 触发时机调用了一个根本不存在的方法 功能 参数2个参数$arg1,$arg2 返回值调用的不存在的方法的名称和参数 ?phphighlight_file(__FILE__);error_reporting(0);class User {    public function __call($arg1,$arg2)    {        echo $arg1,$arg2[0];          }}$test  new User() ;$test - callxxx(a);?输出callxxx,a $test new User()这句话是把new User实例化成为一个对象给$test接下来从test调用出来一个方法callxxx并且给他传了个参数是a但是这里根本没有callxxx所以做不到这里就触发了魔术方法 $arg1是方法$arg2是参数 8._callstatic() 触发时机静态调用或调用成员常量时使用 功能 参数2个参数$arg1,$arg2 返回值调用的不存在的方法的名称和参数 ?phphighlight_file(__FILE__);error_reporting(0);class User {    public function __callStatic($arg1,$arg2)    {        echo $arg1,$arg2[0];          }}$test  new User() ;$test::callxxx(a);?callxxx,a 这里跟_call()差不多一样的只不过这个是静态调用比如$test::callxxx(a);时使用而已不是静态调用就不会触发你可以把::改一下看看别的还会不会触发 9.__get() 触发时机调用的成员属性不存在 功能 参数 返回值不存在的成员属性的名称 ?php highlight_file(__FILE__); error_reporting(0); class User {     public $var1;     public function __get($arg1)     {         echo  $arg1;     } } $test  new User() ; $test -var2; ? 输出 var2 这里其实就是少了一个参数var2但是$test -var2;这里却要输出var2所以就会触发get魔术方法自动帮你添加一个var2上去 10._set() 触发时机给不存在的成员属性赋值 功能 参数 返回值不存在的成员属性的名称和赋的值 ?php highlight_file(__FILE__); error_reporting(0); class User {     public $var1;     public function __set($arg1 ,$arg2)     {         echo  $arg1.,.$arg2;     } } $test  new User() ; $test -var21; ? 输出 var2,1 11._isset() 对一个被保护的属性或者根本就不存在的属性或者私有属性 触发时机对不可访问属性使用isset或empty时__isset就会被调用 功能 参数 返回值不存在的成员属性的名称 ?phphighlight_file(__FILE__);error_reporting(0);class User {    private $var;    public function __isset($arg1 )    {        echo  $arg1;    }}$test  new User() ;isset($test-var);? 输出var 比如这段代码因为这里的var只能在当前类中使用因为这是一个私有属性你出来后调用肯定不可以这里一定会触发——isset魔术方法最终顺利输出var 12._unset() 触发时机对不可访问属性使用__unset时 功能 参数 返回值不存在的成员属性的名称 ?php highlight_file(__FILE__); error_reporting(0); class User {     private $var;     public function __unset($arg1 )     {         echo  $arg1;     } } $test  new User() ; unset($test-var); ? 输出 var 13._clone() 触发时机使用clone关键字拷贝完成一个对象后新对象会自动调用定义的魔术方法__clone() 就是说使用clone克隆对象完成后就会触发魔术方法__clone() 功能 参数 返回值 ?php highlight_file(__FILE__); error_reporting(0); class User {     private $var;     public function __clone( )     {         echo  __clone test;           } } $test  new User() ; $newclass  clone($test) ? 输出 __clone test 真心希望我的文章能够让大家有所收获 总结
http://www.pierceye.com/news/942655/

相关文章:

  • 景观毕业设计作品网站公司网站销售平台建设费分录
  • 品牌网站建设还来大蝌蚪华为手机WordPress
  • 东莞制作企业网站公司网站营销活动页面制作
  • 有中文网站 怎么做英文网站企业网站建设 价格
  • 网络游戏网站开发建设工程施工合同样本
  • 陕西网站制作公司泸州中泸集团建设有限公司网站
  • 营销型网站建设的概念电子商务公司最低注册资本
  • 计划书网站推广的目录怎么做太原便宜做网站的公司哪家好
  • wordpress 直播插件麒麟seo外推软件
  • 网站检测报告哪里做寰宇seo
  • 徐州微信网站建设网站建设员课程
  • 做现货需要关注的网站wordpress+游戏网站
  • 佛山北京网站建设网络营销推广有哪些方法
  • 免费注册网站网址合肥网站建设第一品牌
  • 青州建网站网站建设seo虾哥网络
  • 网站框架怎么设计wordpress新闻页面模板下载
  • 国外网站平台做微信公众号的是哪个网站
  • 岳池住房和城乡建设厅网站wordpress插件清单 很多很全
  • 换域名对网站的影响做黑枸杞的公司网站
  • 昌平沙河网站建设深圳哪些公司需要做网站
  • 海尔网站建设策划书wordpress输出分类
  • 软文营销的方法广东网站建设seo优化制作设计
  • 网站怎样做推广计划创意设计ppt
  • 网站项目报价方案wordpress留言版添加
  • 网站改版协议目前哪个网站建设的最好
  • 网站建设风险管理计划长沙公司网站模板制作方案
  • wordpress p上海做seo的公司
  • 网站统计分析注册公司步骤和所需材料
  • 网站开发的好处和弊端客户管理系统简称
  • 网站开发提供图片加载速度wordpress速度