为foreach()PHP OOP提供的参数无效
我是PHP新手,我正在尝试使用面向对象编程建立一个CMS(内容管理系统) 在重新分解代码以使其更简单时,我遇到了一个问题 当我实例化一个类并使用“auto “实例化”,我的数组不再工作,返回为空 如果我使用长表单,它会返回一个数组,但是当我开发一个真正的站点时,以这种方式编写代码将非常耗时 有点失落,任何帮助都将不胜感激。谢谢 users.php:为foreach()PHP OOP提供的参数无效,php,oop,Php,Oop,我是PHP新手,我正在尝试使用面向对象编程建立一个CMS(内容管理系统) 在重新分解代码以使其更简单时,我遇到了一个问题 当我实例化一个类并使用“auto “实例化”,我的数组不再工作,返回为空 如果我使用长表单,它会返回一个数组,但是当我开发一个真正的站点时,以这种方式编写代码将非常耗时 有点失落,任何帮助都将不胜感激。谢谢 users.php: <?php class User { public $id; public $username; public $
<?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 -->
管理
副标题
空白页
再次检查此部分:
如果(\u对象->具有\u属性(\u属性))
。您不能从对象外部访问“has_the_attribute”私有函数
话虽如此,如果您试图将OOP概念应用到项目中,您应该从分离类中的关注点开始。这个用户
类显然做了太多的事情。它代表一个用户实体(或它们的集合),它充当存储库和工厂
你应该试着把这些东西分开,这会使你的代码更容易推理。一些想法:
- User:此对象将表示您所称的用户,其属性应为私有,并且仅为允许在其上提供
封装的操作提供访问器方法。您也可以通过它的构造函数提供它的强制数据
- UserRepository:将提供两种方法从数据库检索用户对象(
和findAll()
)。您可以从控制器或服务中使用它从用户所在的数据存储(在您的情况下是数据库)中获取用户findById
- UserFactory:此类的职责是从查询返回的数组中构造用户对象。它将是用户存储库的一个依赖项,并将包含如下方法:
(对于单个数据库结果)或buildOneFromArray
(对于许多数据库结果)。它将从存储库中使用buildFromArray
希望这对您有所帮助您忘记将
返回
放在查找所有用户
功能上:
public static function find_all_users()
{
return self::find_this_query("SELECT * FROM users");
}
错误到底发生在哪里?
$users
的值是多少?这里有几个foreach
循环?失败的具体原因是什么?发生这种情况时的运行时值是什么?所有注释都会导致“auto”类的生成。也就是说,我以前做过这些测试。当我检查“用户”是否是数组时,它返回为空,我不明白为什么。当我在没有if语句的情况下运行它时,它会作为一个无效参数返回。例如,User::find_all_users
不会返回任何内容。顺便问一下-你通常如何处理更新对象-创建一个新类进行更新?我不太确定你所说的“更新”是什么意思。如果您引用的是该模型,那么如果您的类已经提供了该功能(即User->changeAddress(Address$Address)),则可能不需要该模型。您可能需要一个特定的服务来协调模型中更大的更改。如果你指的是数据存储,你也可以使用你的存储库(UserRepository->store($user))。例如,如果我有一个有很多图像的项目模型。如果我以后决定删除一些图像并添加新图像,调用哪个类方法会更好?我应该打电话给存储库吗?