PHP动态创建属性的get和set方法
来源:互联网 发布:抗皱护肤品知乎 编辑:程序博客网 时间:2024/05/21 23:00
在PHP中,我们不能够直接通过方法名相同,签名不同的方法来实现方法重载,因为PHP是弱数据类型,不能很好的区分签名。但是,可以在PHP的类中运用__call()方法来实现方法重载。当调用一个类中并不存在的方法时,会自动调用__call()方法,其形式为__call($name,$arguments) 其中$name是方法的名称,$arguments是一个数组类型的参数。
下面的例子是使用PHP的方法重载来动态创建get和set方法。(在面向对象编程中,一个类中的属性会使用get和set来赋值,但是如果一个类中有太多的属性,比如30个,那么如果不用方法重载的话,我们就需要写30个set方法,30个get方法,自已一边慢慢写去吧。。。)
复制代码 代码如下:
<?php
class person
{
private $name;
private $age;
private $address;
private $school;
private $phonenum;
public function __call($method,$args)
{
$perfix=strtolower(substr($method,0,3));
$property=strtolower(substr($method,3));
if(empty($perfix)||empty($property))
{
return;
}
if($perfix=="get"&&isset($this->$property))
{
return $this->$property;
}
if($perfix=="set")
{
$this->$property=$args[0];
}
}
}
$p=new person();
$p->setname('lvcy');
$p->setage(23);
$p->setAddress(chengdu);
$p->setschool('uestc');
$p->setphonenum('123456');
echo $p->getname().'\\n';
echo $p->getage().'\\n';
echo $p->getaddress().'\\n';
echo $p->getschool().'\\n';
?>
通过__Call()方法很容易的解决了这个问题,而不是编写每个属性的get set方法。
下面的例子是使用PHP的方法重载来动态创建get和set方法。(在面向对象编程中,一个类中的属性会使用get和set来赋值,但是如果一个类中有太多的属性,比如30个,那么如果不用方法重载的话,我们就需要写30个set方法,30个get方法,自已一边慢慢写去吧。。。)
复制代码 代码如下:
<?php
class person
{
private $name;
private $age;
private $address;
private $school;
private $phonenum;
public function __call($method,$args)
{
$perfix=strtolower(substr($method,0,3));
$property=strtolower(substr($method,3));
if(empty($perfix)||empty($property))
{
return;
}
if($perfix=="get"&&isset($this->$property))
{
return $this->$property;
}
if($perfix=="set")
{
$this->$property=$args[0];
}
}
}
$p=new person();
$p->setname('lvcy');
$p->setage(23);
$p->setAddress(chengdu);
$p->setschool('uestc');
$p->setphonenum('123456');
echo $p->getname().'\\n';
echo $p->getage().'\\n';
echo $p->getaddress().'\\n';
echo $p->getschool().'\\n';
?>
通过__Call()方法很容易的解决了这个问题,而不是编写每个属性的get set方法。
0 0
- PHP动态创建属性的get和set方法
- PHP使用方法重载实现动态创建属性的get和set方法
- JS属性的get和set方法
- 根据属性名字调用相应的get和set方法
- 动态调用Java Bean的set和get方法
- PHP:魔术方法set和get的深入特性分析
- 属性 set ,get 方法
- php实例-set和get方法
- get方法和set方法的使用!
- 属性生成器、set get 方法
- object 类的set和get方法,点语法 和 属性生成器
- set 和 get 方法
- get和set方法
- set和get方法
- get和set方法
- set和get方法
- C#封装:关于字段属性的get和set方法的小总结
- VS中自动生成属性get和set方法
- 求最多可以灌溉多少块田地(CodeForce 66B)
- programming-challenges Slash Maze (110904) 题解
- Swift学习笔记
- lua开发--模板渲染
- 信号槽
- PHP动态创建属性的get和set方法
- 图片上传
- block定义详解
- poj 3259 Wormholes 图论 最短路 判负环
- 增强现实(AR)笔记2:Vuforia+Unity例程ObjectRecognition
- YUM 的配置
- Android各个版本API的区别
- 状态图
- UsernamePasswordAuthenticationFilter是登陆用户密码验证过滤器,