Вы бы использовали AJAX. Это сделало бы запрос Get на URL-адрес, о котором идет речь, и вернул HTML-код ответа. Jquery делает это очень легко, например,
$.get("test.php");
Эндрю
Поскольку подсказка типа должна заставить клиентский код адаптироваться к вашему API, ваше решение с принимающими интерфейсами кажется почти правильным.
Посмотрите на это так: yourMethod (array $ input )
дает yourMethod ()
массив для использования, благодаря чему вы точно знаете, какие собственные функции применяются и могут использоваться yourMethod ()
.
Если вы укажете свой метод, например: yourSecondMethod (yourInterface $ input)
, вы также узнаете, какие методы могут быть применены к $ input
, так как вы знаете / можете искать, какой набор правил, сопровождающих интерфейс yourInterface
.
В вашем случае принятие любого объекта кажется неправильным, потому что у вас нет никакого способа узнать, какие методы использовать для ввода. Пример:
Зачем вам намекать объект
, если вместо этого вы можете намекнуть на настоящее имя класса - это было бы гораздо полезнее. Также помните, что вы не можете намекать int
, float
, bool
, string
или ресурс
.
Я чувствую вашу боль, но я тоже не могу найти способ с ней справиться.
Несмотря на то, что было сказано в ряде других плакатов, имеет смысл хотеть хинтинга типа «Объект»; они просто не рассмотрели сценарий, который этого требует.
Я пытаюсь поработать с API отражения, и поэтому мне все равно, какой класс передается моей функции. Меня волнует только то, что это объект. Мне не нужны int, float, string или array. Я хочу объект. Учитывая, что отражение теперь является частью PHP, определенно имеет смысл иметь подсказку по типу объекта.
Вот еще один пример, когда это требуется ...
Я создал класс для реализации блокировки записи. Записи являются одним из множества различных типов объектов. Класс блокировки имеет несколько методов, которым требуется объект (тот, который должен быть заблокирован), но не заботится о том, какой это тип объекта.
Например.
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 () и выдача исключения, но я бы предпочел сделать это с помощью подсказки типов.
Хорошо, это еще не конец света, но я думаю, что это позор.
Вы не можете просто сказать "объект" при приведении типа объекта... вы должны определить, КАКОЙ объект вы ожидаете.
От: 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';
}