2013-11-19 3 views
0

Я пишу это функция файл:ошибки PHP при вызове функции внутри другой функции

<?php 

    function get_num_discos() 
    { 
     include ('connection.php'); 

     $result = mysql_query("SELECT * FROM disco", $connect); 
     $num_rows = mysql_num_rows($result); 

     return $num_rows; 
    } 

    function get_disco_name_from_id($id) 
    { 
    include ('connection.php'); 

    $query = 'SELECT name FROM disco WHERE id = '.$id; 
    $result = mysql_query($query,$connect); 

    while ($reg = mysql_fetch_array($result)) 
     $name = $reg['name']; 

    return $name; 
    } 


    function get_lat_long_from_adress($adress) 
    { 

    $prepAddr = str_replace(' ','+',$address); 
    $geocode=file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$prepAddr.'&sensor=false'); 
    $output= json_decode($geocode); 

    $lat = $output->results[0]->geometry->location->lat; 
    $long = $output->results[0]->geometry->location->lng; 

    return coords($lat,$long); 
    } 

    function get_closest_disco($client_adress) 
    { 
    include ('connection.php'); 

    $num_discos = get_num_discos; 
    $client_adress = "C/ Sant Pau, 70, Lloret de Mar"; 
    $client_coords($client_lat,$client_long) = get_lat_long_from_adress($client_adress); 

    $query = 'SELECT adress FROM disco'; 
    $result = mysql_query($query,$connect); 

    while ($row = mysql_fetch_assoc($result)) 
    { 
     $disco_adress[] = $row; 
    } 

    for ($i = 0; i<$num_discos; $i++) 
    { 
     $disco_coords($disco_lat,$disco_long) = get_lat_long_from_adress($disco_adress[$i]); 

    } 
    } 
?> 

Но я получаю следующую ошибку, которую я не могу решить:

Fatal error: Can't use function return value in write context in C:\xampp\htdocs\discos_test\functions.php on line 47 

точки ошибки: $client_coords($client_lat,$client_long) = get_lat_long_from_adress($client_adress); (это внутри функции get_closest_disco)

Итак, проблема связана с массивом, который возвращает функцию get_lat_long_from_adress ($ address). Я только что последовал за this link, чтобы выполнить эту функцию.

Что случилось? Есть идеи? Спасибо.

+1

Что вы пытаетесь для выполнения этой строки: '$ client_coords ($ client_lat, $ client_long) = get_lat_long_from_adress ($ client_adress);'? –

+1

Левая часть задания не является типом, для которого вы можете присвоить значение. Это функция _call_. Вероятно, вы хотите назначить массив? '$ client_coords [$ client_lat] [$ client_long]' – arkascha

+0

Я хотел, чтобы client_coords был списком и присваивал значение элементов, возвращаемое функцией get_lat_long_from_adress, переменной в этом списке ($ client_lat, $ client_long) –

ответ

0

На основе этого кода:

$client_coords($client_lat,$client_long) = get_lat_long_from_adress($client_adress); 

PHP делает предположение о том, что $client_coords хранит имя функции, и она думает, что вы пытаетесь вызвать его со списком параметров ($client_lat,$client_long). Затем он думает, что вы пытаетесь присвоить результат get_lat_long_from_adress() результату этого вызова функции.

Я подозреваю, что это то, что вы имели в виду, чтобы сделать вместо:

list($client_lat,$client_long) = get_lat_long_from_adress($client_adress); 

Использование list() позволяет присвоить массив группе отдельных переменных.

+0

Я думал, что могу присвоить этому списку имя «client_coords», и нет необходимости использовать список() в качестве «списка». Спасибо. –

0

Это выглядит, как вы используете неправильный синтаксис для решения элементов массива:

Вместо $client_coords($client_lat,$client_long) просто использовать $client_coords[$client_lat][$client_long].

И, кстати, вы пытаетесь назначить массив, возможно, вы пытаетесь присвоить элементы этого массива. В этом случае посмотрите также выражение php list().

+0

Итак, теперь $ client_coords какая переменная? Спасибо. –

0

Я думаю, что вы пытаетесь получить лат и длиной адр, так что вы можете изменить свою функцию как ниже

function get_lat_long_from_adress($adress) 
     { 

     $prepAddr = str_replace(' ','+',$address); 
     $geocode=file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$prepAddr.'&sensor=false'); 
     $output= json_decode($geocode); 

     $lat = $output->results[0]->geometry->location->lat; 
     $long = $output->results[0]->geometry->location->lng; 

     return array('lat'=>$lat,'long'=>$long); 
     } 

и сделать это, чтобы получить результат

$client_coords= get_lat_long_from_adress($client_adress); 
//do sth about $client_coords['lat'] 
//do sth about $client_coords['long'] 
Смежные вопросы