mixed نشاندهنده قبول نمودن چندین نوع پارامتر (البته نه همه) است.
gettype() برای مثال تمام انواع PHP را خواهد پذیرفت در حالی که str_replace() تنها string و array را خواهد پذیرفت.
بعضی توابع مانند call_user_func() یا usort() توابع فراخوانی بازگشتی را به عنوان پارامتر قبول مینمایند. توابع فراخوانی بازگشتی نمیتوانند توابع ساده باشند اما متدهای object شامل متدهای استاتیک کلاس است.
یک تابع PHP با استفاده از نام آن به عنوان یکstring استفاده میشود. یک تابع تعریف شده توسط کاربر و داخلی استفاده شده است به جز ساختهای زبانی array()٬ echo()٬ empty()٬ eval()٬ exit()٬ isset()٬ list()٬ print() یا unset().
یک متد object نمونهسازی شده به عنوان یک array شامل object در اندیس 0 و نام متد در اندیس 1 است.
متدهای استاتیک کلاس بدون قرار دادن مقدار اولیه object از یک کلاس با استفاده از گذراندن نام کلاس به جای object در اندیس 0 ممکن است.
جدا از توابع تعریف شده معمول توسط کاربر create_function() نیز میتواند یک تابع فراخوانی بازگشتی ناشناس بوجود آورد.از PHP 5.3.0 امکان ارسال closure به یک پارامتر بازگشتی وجود دارد.
Example #1 نمونه توابع فراخوانی بازگشتی
<?php
// An example callback function
function my_callback_function() {
echo 'hello world!';
}
// An example callback method
class MyClass {
static function myCallbackMethod() {
echo 'Hello World!';
}
}
// Type 1: Simple callback
call_user_func('my_callback_function');
// Type 2: Static class method call
call_user_func(array('MyClass', 'myCallbackMethod'));
// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
// Type 4: Static class method call (As of PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');
// Type 5: Relative static class method call (As of PHP 5.3.0)
class A {
public static function who() {
echo "A\n";
}
}
class B extends A {
public static function who() {
echo "B\n";
}
}
call_user_func(array('B', 'parent::who')); // A
?>
Example #2 Callback example using a Closure
<?php
// Our closure
$double = function($a) {
return $a * 2;
};
// This is our range of numbers
$numbers = range(1, 5);
// Use the closure as a callback here to
// double the size of each element in our
// range
$new_numbers = array_map($double, $numbers);
print implode(' ', $new_numbers);
?>
The above example will output:
2 4 6 8 10
Note: در PHP4 لازم بود از مرجع برای ساخت نمونه فراخوانی اشارهگر به object حقیقی و نه کپی آن استفاده شود. برای جزئیات بیشتر مرجعها توضیج داده شده را ببینید.
void به عنوان نوع بازگشتی به معنای بیفایده بودن بازگشت است. void در یک لیست پارامتر به معنای عدم پذیریش پارامتر توسط تابع است.
$... در نمونه تابع به معنای و همینطور در ادامه است. نام این متغیر هنگامی استفاده میشود که تابع قادر به دریافت هر تعداد آرگومات است.