猿问

为什么这样却无法输出类b的属性?

class a{//主要功能是连接数据库,取出表中字段,将字段定义为子类属性,想以这种方式实现ActiveRecord
    function doQuery($dbname, $table){        $fields = mysql_list_fields($dbname, $table);        $num = mysql_num_fields($fields);        $keys = array();        for($i=0; $i<$num; $i++){             array_push($keys, mysql_fields_name($fields);
        }        return $keys;
     }
}class b{
     function bind($data){         foreach($data as $key=>$value){             $this->$value = null;
         }         print_r(get_class_vars(get_class($this));
     }
}
杨__羊羊
浏览 122回答 2
2回答

互换的青春

get_class_vars — Get the&nbsp;default&nbsp;properties of the class动态定义的属性是不会被这个函数打出来的 ...如果你需要列出一个类的所有属性 ... 一段小技巧可以帮助到你 ...<?phpclass&nbsp;b&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;bind(&nbsp;$data&nbsp;)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(&nbsp;$data&nbsp;as&nbsp;$key&nbsp;=>&nbsp;$value&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this->$value&nbsp;=&nbsp;null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;just&nbsp;make&nbsp;an&nbsp;array&nbsp;to&nbsp;output&nbsp;like&nbsp;you&nbsp;want&nbsp;...&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ret&nbsp;=&nbsp;[];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;no&nbsp;need&nbsp;to&nbsp;do&nbsp;type&nbsp;conversion&nbsp;here&nbsp;...&nbsp;php&nbsp;will&nbsp;done&nbsp;for&nbsp;us&nbsp;...&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach(&nbsp;$this&nbsp;as&nbsp;$key&nbsp;=>&nbsp;$null_of_course&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ret[]&nbsp;=&nbsp;$key;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;miracle&nbsp;time&nbsp;...&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print_r(&nbsp;$ret&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;} } (new&nbsp;b)->bind(&nbsp;[&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;'aa'&nbsp;&nbsp;&nbsp;&nbsp;=>&nbsp;&nbsp;'bb',&nbsp;&nbsp;&nbsp;&nbsp;'cc'&nbsp;&nbsp;&nbsp;&nbsp;=>&nbsp;&nbsp;'dd' &nbsp;&nbsp;&nbsp;&nbsp;]&nbsp;);或者更简单的写法 ... 需要手动转化一下类型 ...&nbsp;$ret&nbsp;=&nbsp;array_keys(&nbsp;(array)&nbsp;$this&nbsp;);

婷婷同学_

public&nbsp;function&nbsp;doQuery($table){ $fields&nbsp;=&nbsp;mysql_list_fields($this->dbName,&nbsp;$table); $keys&nbsp;=&nbsp;array(); $num&nbsp;=&nbsp;mysql_num_fields($fields); for&nbsp;($i=0;&nbsp;$i&nbsp;<&nbsp;$num;&nbsp;$i++)&nbsp;{&nbsp; array_push($keys,&nbsp;mysql_field_name($fields,&nbsp;$i)); } foreach&nbsp;($keys&nbsp;as&nbsp;$key&nbsp;=>&nbsp;$value)&nbsp;{ $this->$value&nbsp;=&nbsp;$value; } print_r($keys); Echo&nbsp;'<pre>'; print_r(get_class_vars(get_class($this))); }
随时随地看视频慕课网APP
我要回答