ИСПОЛЬЗОВАНИЕ $ THIS в PHP

#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<
    }
}