• 微信:
  • hai764003
  • QQ:
  • 511211014
  • E-mail:
  • jaquery@163.com

案例总数51

访问总数312424

收藏总数310955

什么是面向对象?面向对象的简单了解!返回列表

上传时间:2015-02-02 内容关键字:什么是面向对象?面向对象的简单了解!


答案:

通过__set()方法,把属性的设置 --》 都放到一个数组里,下次处理时,专门处理这个数 组就可以了。这样就不会和其他属性相冲突的,tp就是这么做的 。如下:


class UserModel{

protected $emial = "user@163.com";

protected $data = array();


public function __set($k,$v){

//$this->$k=$v 并没有真正赋成自己的属性。

$this->data[$k]=$v;//而是放在了一个数组里。

}


public function add(){

$sql = 'insert into table (';

$sql .= implode(',',array_keys($this->data));

$sql .= ") vales ('";

$sql .= implode("','", array_values($this->data));

$sql .="')";

return $sql;

}

public function __get($p){

return isset($this->data[$p]?$this->data[$p]:null;)

}

public function __isset($p){

return isset($this->data[$p])

}

//在查看有没有这个数据的时候,也不会真的去本类中查看有没有这个属性,

public function __unset($p){

unset($this->data[$p]?$this->data[$p]:null)

}


}


$userModel = new UserModel();

$userModel->username = 'lisi';

$userModel->email= 'lisi@126.com';

$userModel->sex= 'man';

echo $userModel->add();

unset($userModel->email);//删除的是$data数组下的成员,而不是本类属性。


5. __call__callStatic


1. __call :

class Human{}

$lisi = new Human();

$lisi->say();

// 报错:定义了一个未定义的方法

//Fatal error: Call to undefined method Human::say() in


class Human{

public function hello(){

echo "hello--","
";

}

public function  __call($method,$arguments){

echo "有对象调用",$method,"方法
";

echo "还打印了参数
";

}

}

$lisi = new Human();

$lisi->hello();

$lisi->say(1,2,3);


总结:调用不可见(不存在或者无权限)的方法时,自动调用。

$lisi->say(1,2,3);   -----》  没有say()方法 ---__call(‘say’,array(1,2,3))运行


2. __callStatic:


总结:调用不可见的静态方法时,自动调用。

Human::cary(‘a’,’b’,’c’) ---》 没有cry方法--Human::__callStatic(‘cry’,array(‘a’,’b’,’c’));


 

小海哥推荐你看: 博客园  php教程分享网站  phpmywind  脚本之家