2016-06-01 18 views
-3

私はこの問題のために頭を傷つけています。私のクラスはなぜ機能しないのですか?

object(PDO)#1 (0) { } object(projecteg)#2 (4) { ["_db":"projecteg":private]=> object(PDO)#1 (0) { } ["query"]=> NULL ["stmth"]=> NULL ["conn"]=> NULL }

:私は私のopenshiftログ

PHP Fatal error: Call to a member function totalids() on a non-object in /var/lib/openshift/573dc0da2d5271d357000294/app-root/runtime/repo/st&com.php on line 46, referer: http://express-pad4u.rhcloud.com/

とST & com.phpでdbconfig.inc.phpファイルから$ connおよび$プロジェクトでのvar_dumpをしていることは、次のメッセージが表示されますから、このエラーが出るとして、ここ

は私dbconfig.inc.phpコードです:

:ここ

session_start(); 
define('DB_HOST', getenv('OPENSHIFT_MYSQL_DB_HOST') . ':' . getenv('OPENSHIFT_MYSQL_DB_PORT')); 
define('DB_USER', getenv('**********')); 
define('DB_PASS', getenv('**********')); 
define('DB_BASE', 'project'); 
define('DB_PORT', getenv('OPENSHIFT_MYSQL_DB_PORT')); 

try { 
    $conn = new PDO("mysql:host=" . getenv('OPENSHIFT_MYSQL_DB_HOST') . ";dbname=" . DB_BASE . "", "********", "*********"); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

} catch(PDOException $exc) { 
    echo $exc->getMessage(); 
} 
include 'classes.inc.php'; 

$project = new projecteg($conn); 

は、ST & com.phpファイルのコードですここ10

<?php 
//error_reporting(0); 
include_once "includes/dbconfig.inc.php"; 
$status_replies=""; 
$status_list=""; 
$statusui_edit=""; 
$isowner=""; 
$is_friend=""; 
$statusdeletebutton='';  
$reply_delete_button=""; 
$load= (int)($_POST['load'])*2; 
var_dump($conn); 
echo '<br>'; 
var_dump($project); 
echo '<br>'; 
function hashtags($dat) { 
$regex="/#+([a-zA-z0-9._-]+)/"; 
$dat1= preg_replace($regex, '<a href="hash_sys.php?tag=$1">$0</a>', $dat); 
return $dat1; 

} 
function taggingsys($dat) { 
$regex="/@+([a-zA-z0-9!._-]+)/"; 

$dat1= preg_replace($regex, '<a href="home.php?u=$1">$0</a>', $dat); 
return $dat1; 

} 

function ff(&$s) { 
    //$conn=""; 
    //require_once 'includes/dbconfig.inc.php'; 

    $output=array(); 
    // $friends=array(); 
//$project= new \projecteg($conn); 
    // $totalids=array(); 
$verify_friend=array(); 
foreach ($s as $i=> $r){ 

    //array_push($friends, $r); 
    $r["friend_one"] == $_SESSION['uname'] ? $friends[]= $r["friend_two"] : $friends[] = $r["friend_one"]; 
    echo '<pre>';var_dump($friends);echo '</pre>'; 
    $verify_friend= $project->totalids($friends[$i]); 
    /* foreach ($friends as $v) { 
     echo '<br><h1>';  print_r($v); echo '</h1></br>';   

     echo '<br>'; 
        // var_dump($verify_friend); 
    // array_push($totalids, $verify_friend);  

     } 

    echo '<pre>'; var_dump($verify_friend); echo '</pre>'; */ 
    array_push($output, $verify_friend); 

} 
    return $output; 
} 

$f = array(); 
$stmt= $conn->prepare("select friend_one, friend_two from friends where (friend_one=:session OR friend_two=:session) and accepted='1'"); 
$stmt->bindparam(":session",$_SESSION['uname']); 
$stmt->execute(); 
$f=$stmt->fetchAll(); 

$ids= ff($f); 

foreach ($ids as $i=>$v){ 

    $id=$v[$i]['user_id']; 

    //fetch user_id from update table in db and inject it to the feed query. 
    $totalUpdates=$project->totalUpdates1($id,$load); 
    $total_sess_count=$project->totalupdatescount($id); 

    foreach ($totalUpdates as $j=>$row1) { 

       $updateid=$row1['update_id']; 

       $account_name=$row1['account_name']; 
       $u_id=$row1['user_id_u']; 
       $author=$row1['author']; 
       $post_date=$row1['time']; 
       $title= stripslashes($row1['title']); 
       $data= stripslashes($row1['update_body']); 
       $data1= hashtags($data); 
       //$data1= taggingsys($data0); 
       $pic=$project->viewByUname($author); 
       $uid=$pic['user_id']; 
     $datemade = strftime("%B %d", strtotime($post_date)); 
      $avatar=$pic['avatar']; 
      if ($avatar!=""){ 
      $feed_pic='user/'.$uid.'/'.$avatar; 
     } else { 
      $feed_pic='img/avatardefault.png'; 
      } 
    //other lengthy logic 

クラスのロジックです:

<?php 

class projecteg 
{ 
    private $_db; 
    public $query; 
    public $stmth; 
    public $conn; 

    public function __construct($conn) 
    { 
     $this->_db = $conn; 
    } 

    public function totalids($friend) 
    { 
     try { 

      $sql2 = "select user_id from user where uname=:session or uname=:friend and activated='1'"; 
      $stmth = $this->_db->prepare("$sql2");//Check here syntax of $db 
      $stmth->bindValue(":session", $_SESSION['uname']); 
      $stmth->bindValue(":friend", $friend); 
      $stmth->execute(); 
      return $stmth->fetchAll(); 

     } catch(PDOException $exc) { 
      echo $exc->getMessage(); 
     } 
    } 
} 

は、どのように私は私の方法を作り、仕事にconnのです。

+4

エラーメッセージは46行目ですが、われわれはそれを私たちと共有せず、見えないものをデバッグするのは難しいと言います。 – Pitchinnate

+4

あなたのコードでは、 'totalids()'メソッドの呼び出しはありません。そのコードを表示する必要があります。 – Qirel

+2

あなたは: '非オブジェクト上のメンバ関数totalids()を呼び出すことはできません。あなたのコードのどこにも 'totalids()'が実際に呼び出されます。あなたはそれに実際に46行あるものを掲載していません。 –

答えて

0

$projectを関数ff()で使用しようとしていますが、その関数のスコープ内に存在しないように、関数を渡すか関数内で宣言する必要はありません。あなたを助ける範囲についていくつかの調査をしてください。しかし今のところあなたが使用したい場合は、$projectff()に渡す必要があります。このような何か:

function ff(&$s,$project) { 
... 
} 
$ids = ff($f,$project); 

あなたは既に宣言した$projectを使用したいと仮定しています。もしそうでなければ、Patrick-Qのように関数内に新しいインスタンスを作成する必要があります。

+0

あなたのアドバイスをいただきありがとう – shan2batman

関連する問題