<?php
$ar = (object) array('a'=>function(){
echo 'TEST';
});
$ar->a();
?>
Я получаю эту ошибку Призыв к неопределенному методуВызов функции от объекта?
<?php
$ar = (object) array('a'=>function(){
echo 'TEST';
});
$ar->a();
?>
Я получаю эту ошибку Призыв к неопределенному методуВызов функции от объекта?
Анонимно или нет, у вас есть функция обратного вызова, таким образом, вы должны обрабатывать его как таковой. Например:
<?php
$ar = (object) array(
'a' => function(){
echo 'TEST';
}
);
call_user_func($ar->a);
?>
Update:
Если вы используете PHP 5.3 или выше, посмотрите на другие ответы, пожалуйста :)
Я не думаю, что это правильный синтаксис, это даст вам:
Parse error: syntax error, unexpected T_FUNCTION in....
Вам нужно создать класс, добавить метод к нему, используйте new
ключевое слово, чтобы создать его экземпляр, и тогда вы сможете сделать:
$ar->a();
class myclass
{
public function a()
{
echo 'TEST';
}
}
$ar = new myclass;
$ar->a(); // TEST
См Classes and Objects для получения дополнительной информации.
Но я пытаюсь Ahmed Saber пытается использовать функцию закрытия вместо объявления класса так, как вы это делаете. – ANisus
@ANisus: Это выглядит так, но даже это приведет к «Неустранимая ошибка: вызов неопределенного метода stdClass :: a()». @Mukesh предоставил ответ ниже, давайте посмотрим, является ли это то, что он ищет :) – Sarfraz
Нет функции a()
, но в собственности a
, поэтому вы должны называть ее $ar->a
.
В любом случае, я не думаю, что это будет работать так, как вы ожидаете.
EDIT: По предложению Г. Альваро Викарио вы должны использовать call_user_func, не echo
для вызова функции, и он будет работать правильно.
Или просто для удовольствия, вы можете сделать что-то вроде этого -
<?php
$ar = new stdClass;
$ar->a = function($to_echo){ echo $to_echo; };
$temp = $ar->a;
//[Edit] - $ar->a("hello"); // doesn't work! php tries to match an instance method called "func" that is not defined in the original class' signature
$temp("Hey there");
call_user_func($ar->a("You still there?"));
?>
Вы действительно пробовали этот код? –
нет у меня нет. Это неправильно? –
'Неустранимая ошибка: вызов неопределенного метода stdClass :: a()' в моем поле 5.3. –
По какой-то причине, похоже, что это не так, как вы делаете. Если изменить код и установить другую переменную в функцию, ее можно назвать:
$ar = (object) array('a'=>function(){
echo 'TEST';
});
$a = $ar->a;
$a();
Это не решение. Но из того, что я вижу, это похоже на ошибку или ограничение в PHP 5.3.
Я использую 5.3.5 при попытке этого.
Разве это не '$ a = $ ar-> a;' вместо '$ a = $ ar-> a();'? (вы получаете свойство, которое является закрытием, а затем вызываете его с помощью '$ a()') –
О, конечно, это так. Набирается слишком быстро. Исправлено. Спасибо, что указали это. – ANisus
Возможно, вы испортили это между стилем синтаксиса javascript и стилем синтаксиса php .... снова подумайте, что вы ищете –
Да, это не работает, как в javascript. – mpm
@OM. Закрытие полномочий существует в PHP (http://www.php.net/manual/en/functions.anonymous.php). Возможно преобразование массивов в объекты. Вопрос верен и вызывает интересный момент в том, как делать вещи ИМО. –