简明现代魔法 -> PHP服务器脚本 -> PHP面向对象:instanceof 运算符

PHP面向对象:instanceof 运算符

2010-07-08

在PHP5中,通过方法传递变量的类型有不确定性。于是我们很难判断,一些操作是否可以运行。

使用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:\PHPProjects\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);
?>

程序运行结果:

类型不对,不能使用这个方法.

随机文章推荐
网站分类


注:如需转载本文,请注明出处(原文链接),谢谢。更多精彩内容,请进入简明现代魔法首页。

进入新博客
喜欢本文,就分享它吧
给我留言
您的名字:
您的邮件:
您的网站:


 

copyright © 2009 简明现代魔法    学习、分享、进步

power by Gonn 感谢所有关心和支持本站的朋友们