请查看代码,该数组包含表的表字段名称
class User {
public $db_fields = array('id', 'username', 'password', 'first_name', 'last_name');
public $id;
public $username;
public $password;
public $first_name;
public $last_name;
}
我们的想法是使用一个函数删除公共变量,以便从我可以访问的数组中自动创建公共变量---
示例
我想删除
public $id;
public $username;
public $password;
public $first_name;
public $last_name;
部分,希望$db_fields
数组自动生成此内容。
这样我就可以通过
访问对象了$user = new User();
$user->username = "Ismail";
我做的是
extract($db_fields);
但它会出错:
解析错误:语法错误,意外T_VARIABLE,期待T_FUNCTION 在第3行的C:\ xampp \ htdocs \ advphp \ dbclass \ extractex.php
答案 0 :(得分:1)
您可以一起删除$db_fields
并依赖于SQL查询返回的列,如下所示:
class User
{
private $_data;
public function __construct($id = null) {
//TODO: Load data into $this->_data for user of $id
}
public function __get($name) {
if (array_key_exists($name, $this->_data))
return $this->_data[$name];
return NULL;
}
public function __set($name, $value) {
$this->_data[$name] = $value;
}
public function UpdateUser(){
//TODO: update the database with any changes to the user data or do an insert for new user
}
}
然后你可以动态获取/设置属性,而不需要像这样首先声明它们:
$newUser = new User();
$newUser->username = "Ismail";
$newUser->UpdateUser();
答案 1 :(得分:1)
extract($db_fields);
,则需要从方法内部运行它
像构造函数或函数。 extract($db_fields);
它会为你提取变量但它们不会公开它们将是该函数的本地函数,例如,如果你试试这个
function __construct(){
extract($db_fields);
// the $id will be available in the constractor only
// it will get disposed when this method finished executing
}
另一个approch是使用属性或setter和getter approch
<?php
class User {
private $db_fields = array(
'id',
'username',
'password' => 'ismailPassword',
'first_name',
'last_name'
);
function getValue($key){
if (array_key_exists($key, $this->db_fields)){
return $this->db_fields[$key];
}
return NULL;
}
function setValue($key, $value){
$this->db_fields[$key] = $value;
}
}
$user = new User();
$user->setValue('username', 'Ismail');
echo " Username: ";
echo $user->getValue('username');
echo "\n\n Password: ";
echo $user->getValue('password');
?>
测试代码
答案 2 :(得分:0)
如果数据库结果返回键值对,则可以执行以下操作:
$array = array();
while (($r = $result->fetch_array()) != false){
$obj = new \stdClass();
foreach($r as $key => $value){
$obj->$key = $value;
}
$array[] = $obj;
}