dongpu6141 2016-06-25 00:47
浏览 40
已采纳

PHP MYSQL OOP打印从外部变量调用的表行的值以进行打印

My PHP class function looks something like as when fetching data from database table:

class my {
   public $a;

   public function myFunc(){
       $query = mysql_query("select name,loc,info from stores");
       while ($row = mysql_fetch_array($query)) {
           extract($row);
            echo $this->a;
       }
   }
}

I want that it should print the result of that rows of table which are called when creating object of the class and calling class method as:

$class = new my();
$class->a = '<h1>$name</h1>';
$class->a .= '<p>$loc</p>';
$class->myFunc();

But it did't gives proper result and print as:

$name
$loc
$name
$loc
$name
$loc
...

I want it should print the values of these variable which are actually rows of table and result should be something looking like as:

london store
london near the big mall, england
PK world wide store
F-5 street near the new G-T road london
...

How it can be possible?

Thank You.

  • 写回答

1条回答 默认 最新

  • dstnlhhv791576 2016-06-25 01:17
    关注

    '<h1>$name</h1>' and '<p>$loc</p>' are just a plain strings. The variable references inside them won't get evaluated by echo.

    You can return the items and render them outside of the function:

    class my {
       public function myFunc(){
           $query = mysql_query("select name,loc,info from stores");
    
           $items = array();
           while ($row = mysql_fetch_array($query)) {
                $items[] = $row;
           }
    
           return $items;
       }
    }
    
    $class = new my();
    $items = $class->myFunc();
    
    foreach ($items as $item) {
        echo "<h1>{$item['name']}</h1><p>{$item['loc']}</p>";
    }
    

    If you insist on rendering from within the function you can pass in an anonymous function:

    class my {
        public $renderer; 
    
        public function myFunc(){
            $query = mysql_query("select name,loc,info from stores");
    
            while ($row = mysql_fetch_array($query)) {
                 call_user_func($this->renderer, $row);
            }
        }
    }
    
    $class = new my();
    
    $class->renderer = function ($row) {
        extract($row);
        echo "<h1>$name</h1><p>$loc</p>";
    };
    
    $class->myFunc();
    

    I've used double quoted strings in the code. See PHP docs to learn the difference or see What is the difference between single-quoted and double-quoted strings in PHP?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配