php重载的实现详解

更新时间:2019-10-20 15:15:55 来源:青锋建站 作者:青锋建站

  在一个类中,如果定义了2个或2个以上同名方法,此时称这种现象叫做“重载”--方法重载,也就是我们在其他面向对象的程序设计语言中常见到的现象。而PHP重载指的是使用一个对象(或类)的时候,如果访问了其并没有定义的(即不存在)的属性或方法,则会使用某些“特殊方法” 来应对这种情况。 可见PHP中的重载,其实是一种内部应对“非法使用类或对象措施”,一般分成两种:属性重载和方法重载。 大家要注意区分PHP的重载与面向对象编程领域中的常规“重载”的概念。以下是青锋建站给大家分享的PHP重载的实现与重载方法。

php属性重载

必须明确属性是变量,变量有4种操作:赋值,取值,isset判断,unset销毁。
PHP属性重载
__set($name,$value)方法
对一个对象中不存在的属性进行赋值的时候,会被自动调用。只是提供一种机制给程序员,让我们可以进行必要的处理,而内部本身并不做任何事情。
__set方法用途:我们可以充分利用该方法,让我们的对象实现“自由属性”,--需要的属性无需定义,随意要,随时用。
__get($name)方法
对一个对象中不存在的属性进行取值的时候,会被自动调用。
__isset($name)方法
对一个对象中不存在的属性进行isset判断的时候,会被自动调用。
__unset($name)方法
对一个对象中不存在的属性进行unset操作的时候,会被自动调用。

PHP方法重载

__call($func_name,$func_argument)当对一个对象未定义的实例方法进行调用(访问)的时候,会自动调用预先定义好的魔术方法。
__callstatic()当对一个类未定义的静态方法进行调用(访问)的时候,会自动调用预先定义好的魔术方法。
方法重载可以实现一个针对不同的参数个数或参数的值做出不同的判断从而调用不同的方法的设计理念。

PHP重载的示例1

一般情况下,在类中要使用一个属性,最好是先申明这个属性。否则就是给自己的挖坑了。 先来看以下一段代码,
<?php
class test_class{
    public function out(){
        $this->test = 8;
        return $this->test;
    }
}
$obj = new test_class();
echo $obj->out();
?>
这段代码的输出是:8。
  这就说明了一个未定义的属性,是可以在类中正常使用的。这是因为: 在类中使用$this-> 调用一个未定义的属性时,PHP5会自动创建一个属性供使用。 这个被创建的属性,默认的方法权限是public。 之所以说是挖坑,是当程序中加入了__set()魔术方法后,就不能使用这么使用了。
<?php
class test_class{
    public function __set($property, $value) { 
    }
    public function out(){
        $this->test = 8;
        return $this->test;
    }
}
$obj = new test_class();
echo $obj->out();
?>  
这个代码的输出:PHP Notice: Undefined property: test_class::$test,然而也没有输出。
  在 $this->test = 8;这行代码时,程序发现存在魔术方法__set(),就去调用这个魔术方法而不会自动创建,但不巧的是你的__set()里面什么都没有干,这个属性就没有被创建。在后面使用的时候就当然会出错了。 所以属性最后先定义,或者在__set()上定义它。
  以上就是青锋建站给大家分享的php重载的实现与举例,php重载在项目开发中非常常见,一定要运用熟练。青锋建站,专业网站建设开发,SEO,网络营销推广;PHP框架开发,PHP原生开发,CMS建站开发。青锋建站,提供专业的高品质网站制作服务,包括网站建设,SEO,网络营销,PHP开发,网站建设知名品牌,全国接单,为企业构建强有力的营销平台。

转载请注明来源网址:青锋建站-http://www.sjzphp.com/webdis/php_overload_841.html

电话 15632335515 | 邮箱 943703539@qq.com | QQ 943703539 | 微信 qingfengjianzhan

Copyright © 2016-2026 青锋建站 版权所有