名站导航为爱好php程序的朋友们提供php相关的教程知识。
在PhP程序5中,通过方法传递变量的类型有不确定性。于是我们很难判断,一些操作是否可以运行。
使用instanceof运算符,可以判断当前具体实例操作是否可以有这样的一个形态。当前具体实例操作使用 instanceof与当前类,父类(向上无限追溯),已经实现的接口比较时,返回真。
代码格式:具体实例操作名 instanceof 类名
instanceof 运算符的运用
如下例子可以运行。
<? class User{ private $name; public function getName(){ return "UserName is ".$this->name; } } class NormalUser extends User { private $age = 99; public function getAge(){ return "age is ".$this->age; } } class UserAdmin{ //操作. public static function getUserInfo(User $_user){ echo $_user->getAge(); } } $normalUser = new NormalUser(); UserAdmin::getUserInfo($normalUser); ?>
程序运行结果:
age is 99
在User类中因为没有这个方法而报错:
<? class User{ private $name; public function getName(){ return "UserName is ".$this->name; } } class NormalUser extends User { private $age = 99; public function getAge(){ return "age is ".$this->age; } } class UserAdmin{ //操作. public static function getUserInfo(User $_user){ echo $_user->getAge(); } } $User = new User(); // 这里new的是User. UserAdmin::getUserInfo($User); ?>
程序运行结果:
Fatal error: Call to undefined method User::getAge() in E:\PhP程序Projects\NowaMagic\php\php_InstanceofOperator.php on line 99
使用instatnceof运算符保障代码安全
使用instatnceof运算符,在操作前先进行类型判断。以保障代码的安全性。
<? class User{ private $name; public function getName(){ return "UserName is ".$this->name; } } class NormalUser extends User { private $age = 99; public function getAge(){ return "age is ".$this->age; } } class UserAdmin{ //操作. public static function getUserInfo(User $_user){ if($_user instanceof NormalUser ){ echo $_user->getAge(); }else{ echo "类型不对,不能使用这个方法."; } } } $User = new User(); // 这里new的是User. UserAdmin::getUserInfo($User); ?>
程序运行结果:
类型不对,不能使用这个方法.
好了关于php程序的知识就说到这里希望可以帮助需要的朋友。,PhP程序面向对象之旅:接口与组合模拟多继承
下面的例子,模拟了多重继承。