我是PHP的新手,我正在尝试使用面向对象的编程来设置CMS(内容管理系统)。
在重新分解代码以使其更简单的同时,我遇到了一个问题。
当我实例化一个类并使用“auto”调用一个函数时 实例化“,我的数组不再有效并且返回空白。
如果我使用长格式,它会返回一个数组,但是当我开发一个真实的网站时,以这种方式编码将变得非常耗时。
有点失落,非常感谢任何帮助谢谢。
users.php:
<?php
class User
{
public $id;
public $username;
public $password;
public $first_name;
public $last_name;
public static function find_all_users()
{
self::find_this_query("SELECT * FROM users");
}
public static function find_user_by_id($user_id)
{
global $database;
$result_set = self::find_this_query("SELECT * FROM users WHERE id=$user_id LIMIT 1");
$found_user = mysqli_fetch_array($result_set);
return $found_user;
}
public static function find_this_query($sql)
{
global $database;
$result_set = $database->query($sql);
$the_object_array = array();
while ($row = mysqli_fetch_array($result_set)) {
$the_object_array[] = self::instantation($row);
}
return $the_object_array;
}
public static function instantation($the_record)
{
$the_object = new self;
//Long form instantation
// $the_object->id = $found_user['id'];
// $the_object->username = $found_user['username'];
// $the_object->password = $found_user['password'];
// $the_object->first_name = $found_user['first_name'];
// $the_object->last_name = $found_user['last_name'];
//Auto instantation
foreach ($the_record as $the_attribute => $value) {
if ($the_object->has_the_attribute($the_attribute)) {
$the_object->$the_attribute = $value;
}
}
return $the_object;
}
private function has_the_attribute($the_attribute)
{
$object_properties = get_object_vars($this);
return array_key_exists($the_attribute, $object_properties);
}
}
//Problem is in the function???
?>
admin_content.php:
<div class="container-fluid">
<!-- Page Heading -->
<div class="row">
<div class="col-lg-12">
<h1 class="page-header">
ADMIN
<small>Subheading</small>
</h1>
<?php
$users = User::find_all_users();
if(is_object($users)) {
foreach ($users as $user => $value) {
echo $user->username;
}
} else {
echo "not working";
}
?>
<ol class="breadcrumb">
<li>
<i class="fa fa-dashboard"></i> <a href="index.html">Dashboard</a>
</li>
<li class="active">
<i class="fa fa-file"></i> Blank Page
</li>
</ol>
</div>
</div>
<!-- /.row -->
答案 0 :(得分:0)
仔细检查此部分:if ($the_object->has_the_attribute($the_attribute))
。您应该无法访问&#39; has_the_attribute&#39;来自对象外部的私有函数。
话虽如此,如果您尝试将OOP概念应用于您的项目,您应该首先分类您的课程中的问题。这个Users
课显然做了太多事情。它代表一个用户实体(或它们的集合),它充当存储库,也充当工厂。
您应该尝试将这些内容拆分为appart,这样可以更轻松地推理您的代码。一些想法:
encapsulation
。您也可以通过其构造函数提供其必需数据。findAll()
和findById
)。您可以从控制器或服务中使用它来从他们所在的任何数据存储中获取用户(在您的情况下,数据库)。buildOneFromArray
(对于单个DB结果)或buildFromArray
(对于许多DB结果)。它可以从存储库中使用。希望这有帮助
答案 1 :(得分:0)
您忘记将return
放在该find_all_users
函数上:
public static function find_all_users()
{
return self::find_this_query("SELECT * FROM users");
}