PHP中的重载,即__call($name , $args)的使用

 作者:Blue

 上传时间:2017-08-30

 标签: php

今天温习了下php基础,看了看看见有个php重载,看起来很熟悉,但是想不起,然后就敲敲试试。发现并不能实现重载。
为什么呢?我们先来看看什么叫做方法重载:方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。
但是php的__call()这个魔术方法只能实现捕捉到调用函数的方法没有适合才能用上,在类里面方法存在时候,跟换参数,并不能实现描述方法重载的这个定义。大伙儿可以试一试。下面是我测试的代码。

<?php

class computer {
    public $price = 100;

    /**
     * 价格上调
     * @param $price
     * @return mixed
     */
    public function priceUp($price){
        return $this->price += $price;
    }

    /**
     * PHP的重载
     * @param $name
     * @param $arguments
     * @return mixed
     */
    public function __call($name, $arguments)
    {
        if ($name == 'priceUps') {
            return $arguments;
        }
        if ($name = 'priceUp') {
            return $arguments;//
        }
    }

}

$computer = new Computer();
$computer->priceUp(100);//上调100 输出为200
$computer->priceUp(150,200);//上调100多一个参数输出为350
$computer->priceUps(100);//一个class中并不存在的方法。输出为[100]

欢迎支付宝打赏


   常用下载
  • wkhtmltox 一款将html转换成pdf的软件,laravel有相关支持包  
  • linux一键环境OneinStack(支持lnmp,lamp)