<?
// libuser.php
// Coding: boban <[email protected]
// Usage:
// include("include/libuser.php");
$u = new user();
$u->name = 'abc'; // set $user[name] to abc
print $u->name; // get $user[name]
unset($u->name); // unset $user[name]/*
回复: Php5的重载
 
PHP5中重载包含:成员重载和方法重载
成员的重载就是我们通过一个类的示例来调用一个不存在(或者不可以访问)的成员属性的时候。
类自动重载已经预先定义了__set()函数或者__get()函数来做相应的处理。例如上述例子中,我们使用语句
PHP 代码:
$u->name = 'abc'; # set $user[name] to abc  进行赋值的时候,由于$name这个变量在类中没有定义,所以类重载了__set()函数的处理方式,直接把abc的值存储入数组$user中。*/class User{    /*.类:user。 有一个数组 属性 user,方法:__construct(1)--------------把一个seesion 赋值给数组 $user,__set(2)----------------------把传入的参数 一个当数组 的 key ,一个当 数组 的 value。。那么当传入的是一个参数的时候,该怎么办?定义的时候是两个参数啊。
__get(3)----------------------传入一个参数,作为 $user 数组的key ,__unset(4)---------------------设置为 NULL __call(5)------------------------调用方法 $m(),把第一个传入参数作为方法名字。那么问题就来了,那么这个函数--方法,是否需要重新调用set 呢公用。。authorize(6)----------------------检查 key 为 $val 的数组,是否为空 (空有 0 ,"0",NUll ,0字节等),。。公用。。serialize(7)----------------------把user 属性 赋值给 $_SESSION['signup'],
*/private $user = array();
 
function __construct(){if(!ini_get('session.auto_start')) session_start();
$this->user = $_SESSION['signup'];
}
 
// Set user's value
function __set($nm,$val){
$this->user[$nm] = $val;
$this->serialize();
}
// Get user's value
private function __get($nm){
return $this->user[$nm];
}
// check user's value
private function __isset($nm){
return isset($this->user[$nm]);
}
// unset user's value
private function __unset($nm){
unset($this->user[$nm]);
$this->serialize();
}
// call a function to valid login
public function __call($m,$a){
return call($this->$m($a));
}
// verify user
public function authorize($val){
if(empty($this->user[$val])) return false;
else return true;
}
// serialize to session
private function serialize(){
$_SESSION['signup'] = $this->user;
}
}
echo "<br>";
var_dump ($_SESSION["signup"]);
?>

解决方案 »

  1.   

    问题:__set(2)----------------------把传入的参数 一个当数组 的 key ,一个当 数组 的 value。。那么当传入的是一个参数的时候,该怎么办?定义的时候是两个参数啊。
    __call(5)------------------------调用方法 $m(),把第一个传入参数作为方法名字。那么问题就来了,那么这个函数--方法,是否需要重新调用set 呢
      

  2.   


     问题
    __set(2)----------------------把传入的参数 一个当数组 的 key ,一个当 数组 的 value。。那么当传入的是一个参数的时候,该怎么办?定义的时候是两个参数啊。
    我是没有见过一个参数可以访问的,因为__set()你是不能直接调用的,你举个有一个参数的情况??
    __call(5)------------------------调用方法 $m(),把第一个传入参数作为方法名字。那么问题就来了,那么这个函数--方法,是否需要重新调用set 呢
    是否需要重新调用set 呢??? 你要set什么???
      

  3.   

    set 不是会在 调用不存在的 方法 的时候激活的么传入一个没有在类里面定义的方法,不是会 调用set 的么???
      

  4.   

    // call a function to valid login
    public function __call($m,$a){
    return call($this->$m($a));就是这里啊。这个 $this->$m($a)