2017-09-12 129 views
-2

我想在PHP上创建一些类和方法,并且一些函数是很好的输出,但在上次输出中,我不能抛出一个变量,这是我的类。类不能返回对象

在这里,我调用类,

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

    print json_encode($query); 

选择,从和排序依据是好的。但我不能得到最后一个函数(执行)的输出,只是空对象我发现{}

参见下面我的课程,方法​​。 如果我手动打印查询对象,并且输出正常。但如果我使用返回这$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(); 
    } 
} 
} 

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

+5

结果已经用'print_r'获取。您__无法两次获取它,因此请移除'print_r'行。 –

+0

'$ result = $ query - > ...-> execute('fetchAll'); echo json_encode($ result)'?另外,所有这些'print_r'语句都会毁掉你的JSON响应 – Phil

+1

就是''''''''''''''''前面​​的'$'是故意的吗?在'$ query - > $ fetch()'编辑:啊,我现在看到它...但是,u_mulder是正确的。 – Jakumi

回答

0

增加公共$输出;

并使用 $ this-> output = $ query-> fetch();

因为只是公众可以显示到页面。

谢谢

-2

定义你的目标象

$query = new query($mysqli);