<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<?php
class MoShu{
public $num1;
private $num2;
private $age;
//__set方法没有定义相当于不存在
//__set方法格式比较固定,必须工有的public,参数必须有两个
//第一个参数:属性名称(字符串格式);第二个参数:属性的值
public function __set($name,$value){
// echo'<br>无法直接调用的属性:'.$name;
//property_exists判断类当中是否有某个名称属性存在
if(property_exists($this,$name)){
$this->$name=$value;
}else{
echo'没有对应的属性:'.$name.'<br>';
}
}
//__get方法格式也是固定的,必须有一个参数
//需要提取值得参数名称,字符串格式
public function __get($name){
echo'调用了魔术方法__get ';
if(property_exists($this,$name)){
return $this->$name;
}else{
echo'没有对应的属性:'.$name.'<br>';
return null;
}
}
private function myself(){
echo'火柴人访问的方法<br>';
}
private function mytest($num){
echo'<br>接收的数据'.$num .'<br>';
}
//__call 如果没有定义则没有
//第一个参数:调用的方法名称(字符串),第二个参数:该方法的参数(数组格式),需要自己拆分
public function __call($name,$canshu){
// $this->$name($canshu);
switch(count($canshu)){
case 0:call_user_func(array($this,$name));
break;
case 1:call_user_func(array($this,$name),$canshu[0]);
break;
case 2:call_user_func(array($this,$name),$canshu[0],$canshu[1]);
break;
}
}
public function __isset($value){
echo'调用了__isset方法 ';
return isset($value);
}
//__toString函数是将对象手动转换为字符串格式的内容,以便操作或者输出
//该函数要求必须有一个返回值,且格式必须是字符串
public function __toString(){
return "数字:".$this->num1.',年龄:'.$this->num2;
}
//把对象用函数的方式进行书写调用时,自动访问__invoke函数
public function __invoke($canshu=""){
return "接受的参数:".$canshu;
}
}
$ms=new MoShu();
$ms->age=30;
$ms->num2=20;
$ms->num1=10;
$ms->num3=40;
var_dump($ms);
echo $ms->num2;
echo'<br><br>';
echo$ms->num3;
//系统函数isset访问类中不可直接访问的属性时,仅仅只调用了__isset魔术方法
echo'<br><br>';
$ms->myself();
$ms->mytest(100);
echo'<br><br>';
echo $ms->num2.' ';
if(isset($ms->num2)){
echo'isset:OK';
}else{
echo'isset:NO';
}
//系统函数empty访问类中不可直接访问的属性时,仅仅只调用了__empty魔术方法,在调用__get魔术方法
echo'<br><br>';
echo $ms->num2.' ';
if(empty($ms->num2)){
echo'empty:OK';
}else{
echo'empty:NO';
}
echo'<br><br>';echo'<br><br>';
echo $ms;
echo'<br><br>';
echo $ms(100);
echo'<br><br>';
var_dump($ms);
$clms=clone $ms;
var_dump($clms);
echo'<br><br>';
$ms->num1=100;
var_dump($ms);
var_dump($clms);
echo'<br><br>';
class Test{
}
if($clms instanceof MoShu){
echo 'OK';
}else{
echo'NO';
}
echo'<br><br>';
if($clms instanceof Test){
echo 'OK';
}else{
echo'NO';
}
?>
</body>
</html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<?php
class MoShu{
public $num1;
private $num2;
private $age;
//__set方法没有定义相当于不存在
//__set方法格式比较固定,必须工有的public,参数必须有两个
//第一个参数:属性名称(字符串格式);第二个参数:属性的值
public function __set($name,$value){
// echo'<br>无法直接调用的属性:'.$name;
//property_exists判断类当中是否有某个名称属性存在
if(property_exists($this,$name)){
$this->$name=$value;
}else{
echo'没有对应的属性:'.$name.'<br>';
}
}
//__get方法格式也是固定的,必须有一个参数
//需要提取值得参数名称,字符串格式
public function __get($name){
echo'调用了魔术方法__get ';
if(property_exists($this,$name)){
return $this->$name;
}else{
echo'没有对应的属性:'.$name.'<br>';
return null;
}
}
private function myself(){
echo'火柴人访问的方法<br>';
}
private function mytest($num){
echo'<br>接收的数据'.$num .'<br>';
}
//__call 如果没有定义则没有
//第一个参数:调用的方法名称(字符串),第二个参数:该方法的参数(数组格式),需要自己拆分
public function __call($name,$canshu){
// $this->$name($canshu);
switch(count($canshu)){
case 0:call_user_func(array($this,$name));
break;
case 1:call_user_func(array($this,$name),$canshu[0]);
break;
case 2:call_user_func(array($this,$name),$canshu[0],$canshu[1]);
break;
}
}
public function __isset($value){
echo'调用了__isset方法 ';
return isset($value);
}
//__toString函数是将对象手动转换为字符串格式的内容,以便操作或者输出
//该函数要求必须有一个返回值,且格式必须是字符串
public function __toString(){
return "数字:".$this->num1.',年龄:'.$this->num2;
}
//把对象用函数的方式进行书写调用时,自动访问__invoke函数
public function __invoke($canshu=""){
return "接受的参数:".$canshu;
}
}
$ms=new MoShu();
$ms->age=30;
$ms->num2=20;
$ms->num1=10;
$ms->num3=40;
var_dump($ms);
echo $ms->num2;
echo'<br><br>';
echo$ms->num3;
//系统函数isset访问类中不可直接访问的属性时,仅仅只调用了__isset魔术方法
echo'<br><br>';
$ms->myself();
$ms->mytest(100);
echo'<br><br>';
echo $ms->num2.' ';
if(isset($ms->num2)){
echo'isset:OK';
}else{
echo'isset:NO';
}
//系统函数empty访问类中不可直接访问的属性时,仅仅只调用了__empty魔术方法,在调用__get魔术方法
echo'<br><br>';
echo $ms->num2.' ';
if(empty($ms->num2)){
echo'empty:OK';
}else{
echo'empty:NO';
}
echo'<br><br>';echo'<br><br>';
echo $ms;
echo'<br><br>';
echo $ms(100);
echo'<br><br>';
var_dump($ms);
$clms=clone $ms;
var_dump($clms);
echo'<br><br>';
$ms->num1=100;
var_dump($ms);
var_dump($clms);
echo'<br><br>';
class Test{
}
if($clms instanceof MoShu){
echo 'OK';
}else{
echo'NO';
}
echo'<br><br>';
if($clms instanceof Test){
echo 'OK';
}else{
echo'NO';
}
?>
</body>
</html>