#php
#php
Вопрос:
В моем коде я пытаюсь вызвать функцию, которая находится внутри другой функции. Я пытаюсь передать переменную $results в функцию NVPToArray() и вернуть результат. После этого я хочу повторить результат, который будет представлять собой массив. Я продолжаю получать сообщение об ошибке, в котором говорится, что функция не определена, поэтому я почти уверен, что я неправильно вызываю функцию.
<?php
class Process extends BaseController {
// Function to convert NTP string to an array
public function postPurchase() {
// Include config file
include(app_path().'/includes/paypal_config.php');
$result = curl_exec($curl);
curl_close($curl);
// Parse the API response
$nvp_response_array = parse_str($result);
// Function to convert NTP string to an array
function NVPToArray($NVPString)
{
$proArray = array();
while(strlen($NVPString))
{
// name
$keypos= strpos($NVPString,'=');
$keyval = substr($NVPString,0,$keypos);
// value
$valuepos = strpos($NVPString,'amp;') ? strpos($NVPString,'amp;'): strlen($NVPString);
$valval = substr($NVPString,$keypos 1,$valuepos-$keypos-1);
// decoding the respose
$proArray[$keyval] = urldecode($valval);
$NVPString = substr($NVPString,$valuepos 1,strlen($NVPString));
}
return $proArray;
}
NVPToArray($this->$result);
echo $proArray;
}
}
?>
Комментарии:
1. похоже, вы пытаетесь вызвать функцию
NVPT
неNVPToArray()
… кроме того, я рекомендую не использовать подобные функции вложения, поскольку это делает код намного менее читаемым.2. Почему вы определяете NVPToArray внутри другой функции? Почему бы вам не поместить его в корень класса?
3. Указывает ли ваша правка, что
NVPT()
в вашем исходном сообщении была опечатка?
Ответ №1:
Вы не должны объявлять функцию внутри функции в PHP, это вызовет ошибку, если вы запустите функцию более одного раза. Кроме того, ваша функция называется NVPToArray
, но вы вызываете NVPT
. Попробуйте что-нибудь более похожее на это (не совсем понятно, что вы пытаетесь сделать в postPurchase
).
<?php
class Process extends BaseController {
// Function to convert NTP string to an array
public function postPurchase() {
// Include config file
include(app_path().'/includes/paypal_config.php');
$result = curl_exec($curl);
curl_close($curl);
// Parse the API response
$nvp_response_array = parse_str($result);
echo $this->NVPToArray($result);
}
// Function to convert NTP string to an array
public function NVPToArray($NVPString)
{
$proArray = array();
while(strlen($NVPString))
{
// name
$keypos= strpos($NVPString,'=');
$keyval = substr($NVPString,0,$keypos);
// value
$valuepos = strpos($NVPString,'amp;') ? strpos($NVPString,'amp;'): strlen($NVPString);
$valval = substr($NVPString,$keypos 1,$valuepos-$keypos-1);
// decoding the respose
$proArray[$keyval] = urldecode($valval);
$NVPString = substr($NVPString,$valuepos 1,strlen($NVPString));
}
return $proArray;
}
}
?>
Комментарии:
1. 1 Этот код организован намного лучше, чем исходный код, опубликованный OP.
2. Я исправил код с вашими улучшениями. Ранее загруженный мной код был урезанной версией оригинала. Вот оригинал. Я пытаюсь вызвать свойство «nvp_response_array» и вызвать для него NVPToArray(), но по какой-то причине это не работает.
Ответ №2:
Вы получаете неопределенную функцию, потому что вы вызываете NVPT()
, которая не существует.
Вы должны вызвать NVPToArray()
функцию.
И насчет $this
, поскольку ваш $result
var определен внутри функции, вам не нужно его использовать. Вы можете вызвать его с помощью просто $result
.
Вы бы использовали его, если бы у вас было что-то вроде:
class T {
...
public $result;
function yourF(){
....
echo $this->resu<
}
}