WordPress как на ладони
wordpress jino

Что такое свойство класса?

кучу мануалов перечитал про return, но хоть убей, не пойму, как это работает:

$response->return // КАК ЭТО РАБОТАЕТ???

// Вот функция где ЭТО есть:

private function as_array($response) {
		// Случай, когда выборка пустая
		if (!isset($response->return)) {
			return array();
		}
		// Случай, когда в выборке всего 1 элемент
		if (!is_array($response->return)) {
			return array($response->return);
		}
		return $response->return;
	}

хотя бы ссылочкой на правильный мануал помоги)

0
lincaseidhe62 1.5 года назад
  • 0
    Kama4659

    Это не функция, а метод класса. Тут return - это свойство класса. Проще говоря глобальная переменная внутри класса. Если писать процедурно (без классов) то можно написать так...

    // определяем
    class Res{
    	var $return = array('bar');
    }
    
    function as_array($response) {
    	global $return;
    
    	// Случай, когда выборка пустая
    	if (!isset($response->return)) {
    		return array();
    	}
    	// Случай, когда в выборке всего 1 элемент
    	if (!is_array($response->return)) {
    		return array($response->return);
    	}
    	return $response->return;
    }
    
    // вызываем
    $response = new Res();
    
    $foo = as_array( $response );
    
    // выводим
    print_r($foo);
    /* Выведет
    Array
    (
    	[0] => bar
    )
    */
    lincaseidhe 1.5 года назад

    переменная может быть не объявлена внутри класса? просто у меня IDE подсвечивает её как обычный return, а когда запускаю метод, в котором присутствует as_array - у меня 500 ошибка на скрипте. хотя метод, в котором нету обработки через as_array - выполняется нормально....

    lincaseidhe 1.5 года назад

    а из переменных есть только $url и $client...

    //Вот кусок без лишних методов.
    class Server
    {
    
    	private $url;
    	private $
    
    	function __construct($url, $login, $password)
    	{
    
    		$this->url = $url;
    
    		$opts = array(
    			'login' => $login,
    			'password' => $password,
    			'authentication' => SOAP_AUTHENTICATION_BASIC,
    			'compression' => TRUE,
    			'trace' => TRUE,
    			'exceptions' => TRUE,
    			'classmap' => array(
    				'country' => 'Country',
    				'region' => 'Region',
    				'point' => 'Point',
    				'race' => 'Race',
    				'raceType' => 'RaceType',
    				'raceStatus' => 'RaceStatus',
    				'raceSummary' => 'RaceSummary',
    				'depotInfo' => '_Depot',
    				'stop' => 'Stop',
    				'seat' => 'Seat',
    				'ticketType' => 'TicketType',
    				'docType' => 'DocType',
    				'order' => 'Order',
    				'ticket' => 'Ticket',
    				'user' => 'User',
    				'company' => 'Company',
    				'benefit' => 'Benefit',
    				'reference' => 'Reference',
    				'referenceItem' => 'ReferenceItem',
    			),
    //                                 'connection_timeout' => 10,
    //                                 'default_socket_timeout' => 15,
    			'cache_wsdl' => WSDL_CACHE_NONE
    		);
    
    		$this->client = new SoapClient($url, $opts);
    		//var_dump($this->get_functions());
    	}
    
    	private function as_object($response) {
    		return isset($response->return) ? $response->return : NULL;
    	}
    
    	private function as_array($response) {
    		// Случай, когда выборка пустая
    		if (!isset($response->return)) {
    			return array();
    		}
    		// Случай, когда в выборке всего 1 элемент
    		if (!is_array($response->return)) {
    			return array($response->return);
    		}
    		return $response->return;
    	}
    
    	/**
    	 * Получить информацию о версии сервера
    	 *
    	 * @return string Текущая версия сервера
    	 */
    	public function get_version()
    	{
    		$response = $this->client->getVersion();
    		return $this->as_object($response);
    	}
    
    	/**
    	 * Получить список автовокзалов, доступных пользователю
    	 *
    	 * @return Depot[] Информация об автовокзалах
    	 */
    	public function get_depots()
    	{
    		$response = $this->client->getDepots();
    		return $this->as_array($response);
    	}
    }

    Вот get_version() - работает, остальное 500 ошибка

    Kama 1.5 года назад

    as_array получает объект в котором должно быть свойство return...

    Вот что я вижу, дальше сами разбирайтесь уже...

    $this->client = new SoapClient($url, $opts);
    // ...
    $response = $this->client->getDepots();
    // ...
    $this->as_array($response);

    Т.е. new SoapClient($url, $opts); должен вернуть объект с методом getDepots(), который в свою очередь должен вернуть другой объект со свойством return, которое ждет as_array().

    Что там под капотами у SoapClient и getDepots вот это вам и предстоит выяснить и найти ошибку.

    просто у меня IDE подсвечивает её как обычный return

    Это просто неправильная подсветка синтаксиса может быть. Вы на IDE особо не полагайтесь, в них баги и недоработки бывают только так...

    lincaseidhe 1.5 года назад

    как просто. Кама - ты спаситель) Спасибо тебе) пойду мозг сисадмину выносить, почему у них серв ничего кроме версии не отдает, завтра...

    lincaseidhe 1.5 года назад

    500 ошибка кстати после смены версии php ушла....

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Регистрация. Вход.