2017-09-12 173 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);