PHP
downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Манипулации с типове> <NULL
Last updated: Fri, 02 Jan 2009

view this page in

Псевдо-типове и променливи, използвани в настоящата документация

mixed (смесен)

mixed обозначава, че даден параметър може да приема множество (но не непременно всички) типове.

gettype() например приема всички типове в PHP, докато str_replace() приема само низове и масиви.

number (число)

number обозначава, че параметърът може да бъде или цяло (integer) или плаващо (float) число.

callback (обратно извикване)

Някои функции като call_user_func() или usort() приемат като параметър потребителски-дефинирани функции за обратно извикване. Последните могат да бъдат не само прости функции, но също и методи на обекти, включително и статични такива.

Функцията в PHP просто се предава с името си под формата на низ. Можете да предавате коя да е вградена или потребителски-дефинирана функция. Забележете, че езикови конструкции като array(), echo(), empty(), eval(), exit(), isset(), list(), print() и unset() не могат да бъдат извикани с обратно извикване.

Метод на инстанцииран обект се предава като масив, съдържащ обекта като елемент с индекс 0 и името на метода като елемент с индекс 1.

Статичните методи на клас също могат да бъдат предавани, без да е необходимо да се инстанциира обект от този клас, чрез предаването на името на класа, вместо обекта, за елемента с индекс 0.

Освен обикновените потребителски-дефинирани функции, create_function() може да бъде изполозвана, за да се създаде анонимна функция за обратно извикване.

Example #1 Примери за функции с обратно извикване

<?php 
// Примерна функция за обратно извикване
function my_callback_function() {
  echo 
'hello world!';
}

// Примерен метод за обратно извикване
class MyClass {
  static function 
myCallbackMethod() {
      echo 
'Hello World!';
  }
}

// Тип 1: Просто извикване
call_user_func('my_callback_function'); 

// Тип 2: Извикване на статичен метод от клас
call_user_func(array('MyClass''myCallbackMethod')); 

// Тип 3: Извикване на метод от обект
$obj = new MyClass();
call_user_func(array($obj'myCallbackMethod'));

// Тип 4: Извикване на статичен метод от обект (От PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');

// Тип 5: Относително извикване на статичен метод (От PHP 5.3.0)
class {
    public static function 
who() {
        echo 
"A\n";
    }
}

class 
extends {
    public static function 
who() {
        echo 
"B\n";
    }
}

call_user_func(array('B''parent::who')); // A
?>

Забележка: В PHP4, ще трябва да използвате референция, за да създадете обратно извикване, което да сочи към самия обект, а не към копие от него. За повече информация вижте Референции.

void

void във връщания тип означава, че връщаната стойност е безполезна. void в списъка с параметри означава, че функцията не приема никакви параметри.

...

$... в прототипа на функция означава и така нататък. Това име на променлива се използва, когато функцията може да приеме неограничен брой аргументи.



Манипулации с типове> <NULL
Last updated: Fri, 02 Jan 2009
 
add a note add a note User Contributed Notes
Псевдо-типове и променливи, използвани в настоящата документация
Hayley Watson
24-May-2007 08:44
The mixed pseudotype is explained as meaning "multiple but not necessarily all" types, and the example of str_replace(mixed, mixed, mixed) is given where "mixed" means "string or array".
Keep in mind that this refers to the types of the function's arguments _after_ any type juggling.
levi at alliancesoftware dot com dot au
09-Feb-2007 12:44
Parent methods for callbacks should be called 'parent::method', so if you wish to call a non-static parent method via a callback, you should use a callback of
<?
 
// always works
 
$callback = array($this, 'parent::method')

 
// works but gives an error in PHP5 with E_STRICT if the parent method is not static
 
$callback array('parent', 'method');
?>
Edward
01-Feb-2007 12:15
To recap mr dot lilov at gmail dot com's comment: If you want to pass a function as an argument to another function, for example "array_map", do this:

regular functions:
<?
array_map
(intval, $array)
?>

static functions in a class:
<?
array_map
(array('MyClass', 'MyFunction'), $array)
?>

functions from an object:
<?
array_map
(array($this, 'MyFunction'), $array)
?>

I hope this clarifies things a little bit

Манипулации с типове> <NULL
Last updated: Fri, 02 Jan 2009
 
 
show source | credits | sitemap | contact | advertising | mirror sites