欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

移动app接口编程技术-学习实现之PHP类其他特性

程序员文章站 2022-05-16 10:28:50
...
  • Static静态关键字

    静态。 在类中,被他标记的变量或方法,不属于任何一个对象。访问的时候要使用“::“。并且在类中自我调用的时候要是用”self::”
    例如:

classCar {privatestatic$speed = 10;

    publicfunctiongetSpeed() {returnself::$speed;
    }

    //在这里定义一个静态方法,实现速度累加10publicstaticfunctionspeedUp()
    {returnself::$speed += 10;
    }
}

$car = new Car();
Car::speedUp();  //调用静态方法加速echo$car->getSpeed();  //调用共有方法输出当前的速度值

静态方法也可以通过变量来进行动态调用。

$func = 'getSpeed';
$className = 'Car';
echo$className::$func();  //动态调用静态方法
  • 访问控制

访问控制通过关键字public,protected和private来实现。被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问。

类属性必须定义为公有、受保护、私有之一。

类中的方法可以被定义为公有、私有或受保护。如果没有设置这些关键字,则该方法默认为公有。

如果构造函数定义成了私有方法,则不允许直接实例化对象了,这时候一般通过静态方法进行实例化,在设计模式中会经常使用这样的方法来控制对象的创建,比如单例模式只允许有一个全局唯一的对象。

classCar {privatefunction__construct() {echo'object create';
    }

    privatestatic$_object = null;
    publicstaticfunctiongetInstance() {if (empty(self::$_object)) {
            self::$_object = new Car(); 
            //内部方法可以调用私有方法,因此这里可以创建对象
        }
        returnself::$_object;
    }
}
//$car = new Car(); //这里不允许直接实例化对象$car = Car::getInstance(); //通过静态方法来获得一个实例
  • 继承
classCar {public$speed = 0; //汽车的起始速度是0publicfunctionspeedUp() {$this->speed += 10;
        return$this->speed;
    }
}
//定义继承于Car的Truck类classTruckextendsCar{publicfunctionspeedUp() {$this->speed = parent::speedUp() + 50;
    }
}

$car = new Truck();
$car->speedUp();
echo$car->speed;
  • 重载

PHP中的重载指的是动态的创建属性与方法,是通过魔术方法来实现的。属性的重载通过__set,__get,__isset,__unset来分别实现对不存在属性的赋值、读取、判断属性是否设置、销毁属性。

classCar {private$ary = array();

    publicfunction__set($key, $val) {$this->ary[$key] = $val;
    }

    publicfunction__get($key) {if (isset($this->ary[$key])) {
            return$this->ary[$key];
        }
        returnnull;
    }

    publicfunction__isset($key) {if (isset($this->ary[$key])) {
            returntrue;
        }
        returnfalse;
    }

    publicfunction__unset($key) {unset($this->ary[$key]);
    }
}
$car = new Car();
$car->name = '汽车';  //name属性动态创建并赋值echo$car->name;

方法的重载通过__call来实现,当调用不存在的方法的时候,将会转为参数调用__call方法,当调用不存在的静态方法时会使用__callStatic重载。

lass Car {
    public$speed = 0;

    publicfunction__call($name, $args) {if ($name == 'speedUp') {
            $this->speed += 10;
        }
    }
}
$car = new Car();
$car->speedUp(); //调用不存在的方法会使用重载echo$car->speed;
  • 类对象比较

对象比较,当同一个类的两个实例的所有属性都相等时,可以使用比较运算符“==“进行判断,当需要判断两个变量是否为同一个对象的引用时,可以使用全等运算符“===“进行判断。

classCar {
}
$a = new Car();
$b = new Car();
if ($a == $b) echo'==';   //trueif ($a === $b) echo'==='; //false

对象复制,在一些特殊情况下,可以通过关键字clone来复制一个对象,这时__clone方法会被调用,通过这个魔术方法来设置属性的值。

classCar {public$name = 'car';

    publicfunction__clone() {$obj = new Car();
        $obj->name = $this->name;
    }
}
$a = new Car();
$a->name = 'new car';
$b = clone$a;
var_dump($b);

对象序列化,可以通过serialize方法将对象序列化为字符串,用于存储或者传递数据,然后在需要的时候通过unserialize将字符串反序列化成对象进行使用。

classCar {public$name = 'car';
}
$a = new Car();
$str = serialize($a); //对象序列化成字符串echo$str.'
'
; $b = unserialize($str); //反序列化为对象 var_dump($b);

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了移动app接口编程技术-学习实现之PHP类其他特性,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

移动app接口编程技术-学习实现之PHP类其他特性

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频