【问题标题】:Class cannot return object类不能返回对象
【发布时间】:2017-09-12 07:18:41
【问题描述】:

我正在尝试在 PHP 上创建一些类和方法,并且一些函数的输出很好,但是在最后的输出中我不能抛出变量,这是我的类。

我在这里给班级打电话,

$fields = array('nik');
    $query = new Query();
    $query
        ->select($fields)
        ->from('data_asset_hw')
        ->orderby('nik','DESC')
        ->execute('fetchAll');

    print json_encode($query);

select、from 和 orderby 很好。但我无法从最后一个函数(执行)获得输出,只是我找到了 {} 的空对象。

请参阅下面的课程,方法是 execute()。 如果我手动打印查询对象,并且输出正常。但是如果我使用返回这个$query。我发现输出是null。也许我错过了什么?

<?php
Class Query 
{
private $query; 
function __construct(){
    $this->query = "";
}

function select($fields=array()){
    if(!is_array($fields)){
        $sql = sprintf("SELECT %s ",$fields);
        $this->query .= $sql;
        return $this;
    }else{
        $fields = implode("`, `", $fields);
        $sql = sprintf("SELECT `%s` ", $fields);
        $this->query .= $sql;
        return $this;
    }
}

function from($table){
    $table = trim(strtolower(stripslashes($table)));
    $sql = sprintf("FROM %s ", $table);
    $this->query .= $sql;
    return $this;
}

function orderby($field,$order){
    $sql = sprintf("ORDER BY %s %s", $field,$order);
    $this->query .= $sql; 
    return $this;
}

function where($command){
    $sql = sprintf("WHERE %s ", $command);
    $this->query .= $sql;
    return $this;
}

function execute($fetch){
    try{
        $database = DatabaseFactory::getFactory()->getConnection();
        (string)$this->query;
        $query = $database->prepare($this->query);

        if(!$query){
            throw new Exception('The SQL statement can not be prepared!');
        }

        $execute = $query->execute();
        if(!$execute){
            throw new Exception('The PDO statement can not be executed!');
        }
        // output is normally
        print_r($query->$fetch());
        // cannot return object
        return $query->$fetch();
    } catch (PDOException $pdoException) {
        echo '<pre>' . print_r($pdoException, true) . '</pre>';
        exit();
    } catch (Exception $exception) {
        echo '<pre>' . print_r($exception, true) . '</pre>';
        exit();
    }
}
}

我发现我的错误只是添加 public $output;并返回 $this->output = $query->$fetch()。和 wata ......我已经完成了。 谢谢 对不起我的英语不好。

【问题讨论】:

  • 结果已通过print_r 获取。您无法获取两次,因此请删除 print_r 行。
  • $result = $query-&gt;...-&gt;execute('fetchAll'); echo json_encode($result) 怎么样?此外,所有这些 print_r 语句都会破坏您的 JSON 响应
  • $ 前面的fetch 是故意的吗?在$query-&gt;$fetch() 编辑:啊,我现在看到了……但是,u_mulder 是正确的。
  • @Jakumi 我使用 $ 来调用函数 fetch 或 fetchAll。
  • @Phil 如果使用 execute('fetchAll') 会出错

标签: php function class


【解决方案1】:

添加公共 $output;

并将其与 $this->output = $query->fetch();

因为只有公共可以显示到页面。

谢谢

【讨论】:

    【解决方案2】:

    像这样定义你的对象

    $query = new query($mysqli);
    

    【讨论】:

      猜你喜欢
      • 2016-05-14
      • 2020-10-18
      • 2014-02-26
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 2013-10-30
      • 2011-06-28
      • 2013-01-17
      相关资源
      最近更新 更多