2013-10-05 3 views
1

Кто-нибудь знает, как определены функции jquery и анонимные функции? Я пытаюсь создать небольшой класс в php, который будет использоваться так же, как в jquery. , например:анонимная функция в php похожа на jquery

$('.blabla').click(function() 
{ 
    console.log($(this).attr('id'); 
}); 

и в PHP, как бы класс быть, как это сделать?

$object->click(function() 
{ 
    var_dump($this->attr('id'); 
}); 

это возможно? im пытается понять анонимные функции, поэтому я могу знать, когда действительно использовать его.

+0

его можно написать анонимные функции проверить это ... http://stackoverflow.com/questions/2412299/why-and-how-do-you-use-anonymous-functions-in-php – codebreaker

+3

Как вы можете нажмите на объект PHP? – undefined

+0

Если у вас вопрос о том, как метод вызывает функцию, которую он получает в качестве аргумента, см. Документацию по PHP на [переменные функции] (http://php.net/manual/en/functions.variable-functions.php) – Barmar

ответ

0

Для вызова функции вашего метода принимает в качестве аргумента, это было бы так:

function click($callback) { 
    // Do stuff... 
    $callback(); 
    // Do more stuff... 
} 

PHP не имеет ничего, аналогичное специальную переменную this в JavaScript. $this может использоваться только в методах класса, а не в других функциях. Если вы хотите, чтобы обратный вызов имел доступ к этой переменной, вы должны передать его как явный аргумент.

0

Да, вы можете в PHP 5.3 или выше, вы можете прочитать документацию здесь: http://php.net/manual/en/functions.anonymous.php

Это не работает так же, как JavaScript жесткой. JavaScript - это прототипный язык, php - нет.

Вы можете сделать это в JavaScript:

var value = 'foo'; 
object.doSomething(function() { 
    console.log(value); 
}); 

Вы можете сделать это, поскольку функции JavaScript имеет ссылку на это творец. В php вы не можете. Значение будет недоступно.

Кроме этого, он работает аналогично. Например, если вы хотите сделать динамические итерации над массивами или другими структурами.

function iterateOverArray($array, $function) { 
    foreach ($array as $key => $value) { 
     $function($key, $value); 
    } 
} 

Эта функция позволяет вам перебирать массив и указывать собственное действие. Например:

$array = array('foo', 'bar', 'FOBAR'); 
iterateOverArray($array, function ($key, $value) { 
    echo $key . ' => ' . $value; 
}); 

Это очень полезно для изменения сложных структур. Но это единственная ситуация, когда я использовал анонимные функции в php. Но, возможно, это потому, что это все-таки новое в php.

Смежные вопросы