2016-12-15 2 views
1

私はPHPでMongo地理空間クエリを試してきました。私は2つのPHPスクリプトを書いています。私はGeoPHPオブジェクトをクラスから呼び出し、メンバメソッドを呼び出すと私の別のPHPスクリプトclass.master.phpは、クラスを書いたとSCR以上のメンバー・メソッド致命的なエラー:非オブジェクト上のメンバー関数find()を呼び出しますか?

GeoPHP.php

<?php 
require 'class.master.php'; 
$lat = 27.53864605; 
$long = 94.57980515; 
$distance = 5; 

$geObj = new Geo; 

$geObj->DbInst('dbname', 'collectionname'); 

$geObj->assignGeo($lat, $long, $distance); 

$resultFld = array('id', 'name', 'stid', 'dis_id', 'ta_id'); 

$query = array('location'=> 
        array("\$near"=> 
          array("\$geometry"=> 
           array('type'=>'Point', 'coordinates'=> 
            array($long, $lat)),"\$minDistance"=> 0, "\$maxDistance"=>$distance 
          ) 
        ) 
     ); 

$result = $geObj->getResult($query, $resultFld); 

?> 

class.master.php

<?php 

require 'vendor/autoload.php'; 

class Geo{ 

    private $latitude, $longitude, $distance; 
    private $uri = "mongodb://localhost:27017"; 
    private $databaseName; 
    private $db; 

    public $collection; 

    public function DbInst($dbname, $collName){ 
     // Mongo Connection Establish 
     $con = new MongoDB\Client($this->uri); 
     $this->databaseName = $dbname; 
     $this->db = $con->selectDatabase($this->databaseName); 

     $this->collection = $collName; 
    } 

    public function assignGeo($lat, $long, $dis){ 
     $this->latitude = $lat; 
     $this->longitude = $long; 
     $this->distance = $dis; 
    } 

    public function getResult($query, &$resFld){ 

     $cursor = $this->collection->find($query); 

     return $cursor; 

    } 
} 
?> 

ipt return次のエラー

Fatal error: Call to a member function find() on a non-object in D:\xampp_1.8.3\htdocs\GeoMongo\class.master.php on line 35

このエラーを解決するにはどうすればよいですか?

+0

ます$ this->コレクションは、それをダンプし、それが含まれているかどうか確認する、オブジェクトではありません。 – Maytyn

+0

$ this->コレクションはクラス変数で、 'コレクション名'を含みます。@Maytyn –

+0

DbInst関数では、文字列をコレクションプロパティに割り当てます。関数getResult()では、関数find()を文字列であるコレクションプロパティから呼び出すことができます。 – Maytyn

答えて

0

としてあなたのコレクションを設定します。

$this->collection = $this->db->selectCollection($collName); 
関連する問題