Вывод подсказок Типа PHP: поддерживаемый массив, объект НЕТ?

Вы бы использовали AJAX. Это сделало бы запрос Get на URL-адрес, о котором идет речь, и вернул HTML-код ответа. Jquery делает это очень легко, например,

$.get("test.php");

http://docs.jquery.com/Ajax

Эндрю

23
задан Mark Amery 17 October 2015 в 12:56
поделиться

6 ответов

Нет, это невозможно. Я ничего не упустил.

6
ответ дан 29 November 2019 в 02:39
поделиться

Поскольку подсказка типа должна заставить клиентский код адаптироваться к вашему API, ваше решение с принимающими интерфейсами кажется почти правильным.

Посмотрите на это так: yourMethod (array $ input ) дает yourMethod () массив для использования, благодаря чему вы точно знаете, какие собственные функции применяются и могут использоваться yourMethod () .

Если вы укажете свой метод, например: yourSecondMethod (yourInterface $ input) , вы также узнаете, какие методы могут быть применены к $ input , так как вы знаете / можете искать, какой набор правил, сопровождающих интерфейс yourInterface .

В вашем случае принятие любого объекта кажется неправильным, потому что у вас нет никакого способа узнать, какие методы использовать для ввода. Пример:

7
ответ дан 29 November 2019 в 02:39
поделиться

Зачем вам намекать объект , если вместо этого вы можете намекнуть на настоящее имя класса - это было бы гораздо полезнее. Также помните, что вы не можете намекать int , float , bool , string или ресурс .

0
ответ дан 29 November 2019 в 02:39
поделиться

Я чувствую вашу боль, но я тоже не могу найти способ с ней справиться.

Несмотря на то, что было сказано в ряде других плакатов, имеет смысл хотеть хинтинга типа «Объект»; они просто не рассмотрели сценарий, который этого требует.

Я пытаюсь поработать с API отражения, и поэтому мне все равно, какой класс передается моей функции. Меня волнует только то, что это объект. Мне не нужны int, float, string или array. Я хочу объект. Учитывая, что отражение теперь является частью PHP, определенно имеет смысл иметь подсказку по типу объекта.

6
ответ дан 29 November 2019 в 02:39
поделиться

Вот еще один пример, когда это требуется ...

Я создал класс для реализации блокировки записи. Записи являются одним из множества различных типов объектов. Класс блокировки имеет несколько методов, которым требуется объект (тот, который должен быть заблокирован), но не заботится о том, какой это тип объекта.

Например.

public static function lockRecord($record, User $user, $timeout=null)
{
    if(!is_object($record)) throw new \InvalidException("Argument 1 must be an object.");

    $lock=new Lock();
    $lock->setRecord($record);
    $lock->setUser($user);
    $lock->setTimeout($timeout);
    $lock->activate();
    return($lock);
}

Вы увидите, что моим решением было использование is_object () и выдача исключения, но я бы предпочел сделать это с помощью подсказки типов.

Хорошо, это еще не конец света, но я думаю, что это позор.

2
ответ дан 29 November 2019 в 02:39
поделиться

Вы не можете просто сказать "объект" при приведении типа объекта... вы должны определить, КАКОЙ объект вы ожидаете.

От: http://php.net/manual/en/language.oop5.typehinting.php

class MyClass
{
    /**
     * A test function
     *
     * First parameter must be an object of type OtherClass
     */
    public function test(OtherClass $otherclass) {
        echo $otherclass->var;
    }


    /**
     * Another test function
     *
     * First parameter must be an array
     */
    public function test_array(array $input_array) {
        print_r($input_array);
    }
}

// Another example class
class OtherClass {
    public $var = 'Hello World';
}
4
ответ дан 29 November 2019 в 02:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: