繁体   English   中英

如何在表格中显示列

[英]How to Show Columns in a table

我正在学习PHP,并试图在教程之外创建一些代码,为了更好地理解它,我似乎一直无法弄清楚下面的代码在哪里出问题。 我还有很多其他功能都可以正常工作,而不仅仅是这一功能。 谁能指出我正确的方向? 谢谢。

我得到的结果是可捕获的致命错误:类User的对象无法在第20行上转换为字符串,即echo $user . "<br /><br />"; echo $user . "<br /><br />";

这是我的index.php

<? 
$users = User::db_fields(); 
foreach($users as $user) {
echo $user . "<br /><br />";
}
?>

这是我在user.php中的类User

<?php 
class User extends OtherStuff {

public static function db_fields() {
global $db;  
return static::find_by_sql("SHOW COLUMNS FROM my_table");
}
}
<?

这是other_stuff.php中一些我的OtherStuff类

class OtherStuff {

public static function find_by_sql($sql="") {
global $db;
$result_set = $db->query($sql);
$object_array = array();
while($row = $db->fetch_array($result_set)) {
   $object_array[] = static::instantiate($row);
} 
return $object_array;
}

public static function instantiate($record) {
$class_name = get_called_class();
$object = new $class_name;
foreach($record as $attribute => $value){
if($object->has_attribute($attribute)) {
$object->$attribute = $value;
}
} 
return $object;
}
}
?>

你傻了:

echo $users . "<br /><br />"; 应该有$user作为echo参数

<? 
$users = User::db_fields(); 
foreach($users as $user) {
echo $user . "<br /><br />";
?>

您每次都在打印原始阵列

编辑:

新的错误反映了您的User类没有显式定义将类的对象转换为字符串的方式这一事实。 如果要快速生成n脏输出,可以对对象进行var_dump() ,但是最终您将需要覆盖__toString()方法。 检查这个出来。

您也可以在User类中简单地创建一个函数,该函数返回所需的字符串,并只需使用$user->StringifyUser()调用即可。 这种方法之间的(主要)区别在于,在原始上下文中使用PHP时,PHP不会将其User类对象隐式转换为字符串。

编辑2:

我还将检查其他答案,尤其是KyleK的答案,他解决了我没有提到的几个关键点。

好吧,您要遍历的数组是$ users,从$ users获得的值将进入$ user。

但是,您正在回显$ users(数组)。 如果$ users数组中的值都是字符串(或其他标量值),则可以通过将代码更改为:

<? 
$users = User::db_fields(); 
foreach($users as $user) {
  echo $user . "<br /><br />";
}
?>

(我还在末尾添加了缺失的括号)

好吧...。您静态地调用db_fileds()。

User::db_fields();

因此它必须是一个静态函数。

public static function db_fields() {

编辑

您可以将其作为解决方法...

更改查询

return static::find_by_sql("SELECT * FROM mytable LIMIT 1");

然后做...

$fields = User::db_fields(); 
 foreach($fields as $key=>$value ) {
      echo $key; // This will give the field name
 }

编辑2

保留链接到字段的列名。

尽管这可能是错误的,但由于现在实例化了多次,并且在对象找不到属性且未写入的情况下会发生什么,那么您会错过一列。

但是那里有主意...

while($row = $db->fetch_array($result_set)) {

    foreach($row as $k=>$v){
       $object_array[$k] = static::instantiate($row);
    }  

} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM