簡體   English   中英

澄清一行->將sql數據設置為對象變量

[英]Clarify a line/s --> setting sql data into object variables

這是我的第一個問題,我將盡力澄清。

我是一個初學者,現在我要講的是lynda-這是我在PHP MySQL課程之外的課程。

代碼工作正常 ,我只需要為自己在代碼中注釋的行做更好的解釋。

require_once('database.php');

class User {

  public $id;
  public $username;
  public $password;
  public $first_name;
  public $last_name;

  public static function find_all() {
    return self::find_by_sql("SELECT * FROM users");
  }

    /////

    public static function find_by_sql($sql="") {

    global $database;
  $result_set = $database->query($sql);
  $user_array = array();
  while ($row = $database->fetch_array($result_set)) {
    $user_array[] = self::instantiate($row);
    }
    return $user_array;
  }

最后幾行,我幾乎明白了:)

private static function instantiate($row) {
    $user = new self; 

    foreach($row as $attribute=>$value){ 
      if($user->has_attribute($attribute)) { 
        $user->$attribute = $value;          /// THIS LINE BUGS ME
      }
    }
    return $user;

  }

  private function has_attribute($attribute) {

    $user_vars = get_object_vars($this); 
    return array_key_exists($attribute, $user_vars);
  }
}

因此,我認為我不理解array_key_exists返回TRUE或FALSE,在我的情況下為true,但是隨后$users->$attributes =$value ; 對我來說毫無意義

因此,我檢查是否從對象獲取數組MATCH變量名稱中的鍵,

if($user->has_attribute($attribute)) { //and then this is true,perform nxt line
    $user->$attribute = $value;      // i got match of attribute above,how does it put values in $user_vars???

我知道它說類似“如果用戶具有與該提取數組中的鍵相同的屬性,然后將其放入該屬性$ value的相同屬性值中,但是當我從未返回對象變量時,我只是看不到它是如何完成的

感謝您的時間 !

編輯:類變量名稱等於數據庫中column_names的名稱

User類具有公共屬性$id$username$password等。這意味着您可以按以下形式為屬性分配值:

$u = new User;
$u->id = 123;
$u->username = 'username';

並使用動態屬性名稱:

$prop = 'id';
$u->$prop = 123;

$prop = 'username';
$u->$prop = 'username';

這只是發生在您不了解的行中的事情:

if ($user->has_attribute($attribute)) {
    $user->$attribute = $value;

has_attribute方法使用get_object_vars函數獲取$user對象的所有屬性。 后者將對象屬性作為數組獲取:

$user_vars = get_object_vars($this);
/* i.e.
$user_vars = array (
  'id' => ...,
  'username' => ...,
  ...
);
*/

然后, has_attribute方法檢查給定的$attribute鍵是否存在於$attribute數組中:

return array_key_exists($attribute, $user_vars);

如果存在( true ),則將$attribute屬性分配給$value

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM