如何在php中的另一个类中使用其他类的变量

时间:2013-03-26 22:23:55

标签: php

您好我已经尝试通过stackoverflow找到我的问题的答案,但似乎我找不到任何东西。 这是我的问题,我现在正在使用MVC框架,我需要从我的控制器的模型访问变量。这是我的模特:

    <?php

    use Guzzle\Http\Client;

    class Position_model extends CI_Model{

      public function get_location($location){

    // Create a client and provide a base URL
    $client = new Client('http://maps.googleapis.com/maps/api/geocode/json');

    $request = $client->get('?address=' . $location . '&sensor=false');

    // Send the request and get the response
    $response = $request->send();
    //decode json file to get the longitude and latitude

    $json = json_decode($response->getBody(), true);
    var_dump($json);

    if($json["results"][0]["formatted_address"] AND $json["results"][0]["geometry"]["viewport"]["northeast"]){
            $position["address"] = $json["results"][0]["formatted_address"];
            $position["latitude"] = $json["results"][0]["geometry"]["viewport"]["northeast"]["lat"];
            $position["longitude"] = $json["results"][0]["geometry"]["viewport"]["northeast"]["lng"];

            return $position;

            $code = 'success';
            $content = 'LOCATION FOUND ... I AM AWESOME';
            $this->output->set_status_header(201);
        }else{
            $code = 'error';
            $content = 'OOPPS LOCATION NOT FOUND';
            $this->output->set_status_header(400);

        }

    }

}

我需要从这个类中获取$ position以在名为schedule的控制器中使用,并将其附加到另一个名为$ data的变量中 我试过了:

    $position = $this->Position_model->get_location($location)->position;
    $data += $position;

请帮帮我!!!! 但显然,这不起作用,并给我一个错误:未定义的位置或调用非对象属性

2 个答案:

答案 0 :(得分:5)

解决问题的简短答案:

$position = $this->Position_model->get_location($location);
$data += $position;

但您的代码中还有其他问题。你有像

这样的代码
$code = 'success';
$content = 'LOCATION FOUND ... I AM AWESOME';
$this->output->set_status_header(201);

永远不会执行,因为它在return语句之后。所以程序的执行永远不会达到它。你必须把它们放在返回声明之前。

另外,我建议不要更新模型中的属性$ this-&gt;输出。我会向控制器返回一些内容,并根据返回的值设置正确的HTTP头。同时返回事物和改变对象状态可能导致不可预测的行为。

答案 1 :(得分:0)

get_location的返回值是位置。您不需要额外的->position

您的代码应为

$position = $this->Position_model->get_location($location);
$data += $position;

错误告诉你,你正在尝试处理不像一个对象的东西。