


PHP learning: in-depth understanding of is_callable() and method_exists() functions
Apr 25, 2019 pm 05:10 PMThis article mainly introduces the is_callable() and method_exists() functions in PHP, which has high learning value. Interested friends can learn about it.
1. Function analysis
##is_callable()
Definition:
(PHP 4 >= 4.0.6, PHP 5, PHP 7)
is_callable — Detect whether the parameter is a legal callable structure
bool is_callable ( callable $name [,
bool $syntax_only = false [, string &$callable_name
]] )
Parameters:
##nameThe callback function to check.
syntax_only
If set to
, this function only verifies name May be a function or method. It simply rejects non-characters, or does not contain a valid structure that can be used in the callback function. Valid should contain two elements, the first is an object or character, and the second element is a character.
Accepts "callable name". The example below is "someClass::someMethod". Note that although someClass::SomeMethod() is meant to be a callable static method, this is not the case in the example.
Return value: ##If name
can be called ReturnsTRUE, otherwise returns FALSE
. Reference:
http://php.net/manual/zh/function.is-callable.php2. Function test
Test one:
echo '<pre >';
$func = function ($a)
{
echo $a;
};
$re = is_callable($func, true, $callable_name1);
echo '<hr />';
$re1 = is_callable($func, false, $callable_name2);
//結(jié)果
bool(true)
string(17) "Closure::__invoke"
-------------------------------------
bool(true)
string(17) "Closure::__invoke"
Test results:
For anonymous functions, after passing in the function variable, parameter twosyntax_only
true and false, the printing results are the same. ##Test 2:
function c_b($d) { echo $d; } $re = is_callable('c_b', false, $callable_name1); $re1 = is_callable('c_b', true, $callable_name2); var_dump($re); echo '<hr />'; var_dump($re1); echo '<hr />'; var_dump($callable_name1); echo '<hr />'; var_dump($callable_name2); //結(jié)果 bool(true) ---------------- bool(true) ---------------- string(3) "c_b" ---------------- string(3) "c_b"Test result: For general functions, After passing in the function name, parameter two
syntax_only true and false
, the printed results are the same.Test three:
class Person { public static function get($a) { echo $a; } protected function _set() { echo 1; } } $p = new Person(); $re = is_callable([$p, 'get'], false, $callable_name1); $re1 = is_callable([$p, 'get'], true, $callable_name2); var_dump($re); echo '<hr />'; var_dump($re1); echo '<hr />'; var_dump($callable_name1); echo '<hr />'; var_dump($callable_name2); //結(jié)果 bool(true) ----------------- bool(true) ----------------- string(11) "Person::get" --------------------------- string(11) "Person::get"Test result:
For Class method, the parameters are in array structure (class object or class name method name), parameter two syntax_only true and false
, the printing result is the same.Test four:
$a = 'i am string'; $re = is_callable($a, false, $callable_name1); $re1 = is_callable($a, true, $callable_name2); var_dump($re); echo '<hr />'; var_dump($re1); echo '<hr />'; var_dump($callable_name1); echo '<hr />'; var_dump($callable_name2); //結(jié)果 bool(false) ---------------- bool(true) ---------------- string(11) "i am string" ------------------------- string(11) "i am string"
Test result:
對于傳入的驗證name,如果syntax_only 設(shè)置為true,它驗證傳入name是否是字符串,是否含有非法字符,如果不含有,則返回true,它并不會驗證name是否為合法調(diào)用結(jié)構(gòu)。
測試五:
$re = is_callable(['Class', 'Method'], false, $callable_name1); $re1 = is_callable(['Class', 'Method'], true, $callable_name2); var_dump($re); echo '<hr />'; var_dump($re1); echo '<hr />'; var_dump($callable_name1); echo '<hr />'; var_dump($callable_name2); //結(jié)果 bool(false) -------------- bool(true) -------------- string(13) "Class::Method" ----------------------------- string(13) "Class::Method"
測試結(jié)果:
對于傳入的驗證name,如果syntax_only 設(shè)置為true,它只驗證傳入name是否是字符串,是否含有非法字符或是否為數(shù)組參數(shù)字符串1 + 字符串二,如果符合條件,則返回true,它并不會驗證name是否為合法調(diào)用結(jié)構(gòu)。否者返回false;
測試六:
class Person { public static function get($a) { echo $a; } protected function _set() { echo 1; } } $p = new Person(); $re = is_callable([$p, '_set'], false); var_dump($re); echo '<hr />'; $re1 = method_exists($p, '_set'); var_dump($re1); //結(jié)果 bool(false) ------------ bool(true)
測試結(jié)果:
對于函數(shù)is_callable()?來說,如果驗證的類方法,訪問修飾符為protected或private 則返回false。
對于method_exists()?來說,則不受訪問修飾符的影響,只要類方法存在,則返回true。
?三、總結(jié)、
1、is_callable() 函數(shù),可傳入的name類型有:函數(shù)字符串,匿名函數(shù)變量,類或類對象和方法名稱組成的數(shù)組。其函數(shù)第二參數(shù),如果是true,則只驗證name是否是字符串或則是類或字符串1(類對象)和字符串二(方法名稱)組成的數(shù)組。而不驗證name是否為合法調(diào)用結(jié)構(gòu)。如果是false,則驗證name是否為合法調(diào)用結(jié)構(gòu)。
2、method_exists() 函數(shù),不受訪問修飾符的影響,只要類方法存在,則返回true。函數(shù)is_callable()來說,如果驗證的類方法,訪問修飾符為protected或private?則返回false。
?相關(guān)教程:PHP視頻教程
The above is the detailed content of PHP learning: in-depth understanding of is_callable() and method_exists() functions. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

TosecurelyhandleauthenticationandauthorizationinPHP,followthesesteps:1.Alwayshashpasswordswithpassword_hash()andverifyusingpassword_verify(),usepreparedstatementstopreventSQLinjection,andstoreuserdatain$_SESSIONafterlogin.2.Implementrole-basedaccessc

To safely handle file uploads in PHP, the core is to verify file types, rename files, and restrict permissions. 1. Use finfo_file() to check the real MIME type, and only specific types such as image/jpeg are allowed; 2. Use uniqid() to generate random file names and store them in non-Web root directory; 3. Limit file size through php.ini and HTML forms, and set directory permissions to 0755; 4. Use ClamAV to scan malware to enhance security. These steps effectively prevent security vulnerabilities and ensure that the file upload process is safe and reliable.

In PHP, the main difference between == and == is the strictness of type checking. ==Type conversion will be performed before comparison, for example, 5=="5" returns true, and ===Request that the value and type are the same before true will be returned, for example, 5==="5" returns false. In usage scenarios, === is more secure and should be used first, and == is only used when type conversion is required.

The methods of using basic mathematical operations in PHP are as follows: 1. Addition signs support integers and floating-point numbers, and can also be used for variables. String numbers will be automatically converted but not recommended to dependencies; 2. Subtraction signs use - signs, variables are the same, and type conversion is also applicable; 3. Multiplication signs use * signs, which are suitable for numbers and similar strings; 4. Division uses / signs, which need to avoid dividing by zero, and note that the result may be floating-point numbers; 5. Taking the modulus signs can be used to judge odd and even numbers, and when processing negative numbers, the remainder signs are consistent with the dividend. The key to using these operators correctly is to ensure that the data types are clear and the boundary situation is handled well.

Yes, PHP can interact with NoSQL databases like MongoDB and Redis through specific extensions or libraries. First, use the MongoDBPHP driver (installed through PECL or Composer) to create client instances and operate databases and collections, supporting insertion, query, aggregation and other operations; second, use the Predis library or phpredis extension to connect to Redis, perform key-value settings and acquisitions, and recommend phpredis for high-performance scenarios, while Predis is convenient for rapid deployment; both are suitable for production environments and are well-documented.

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

PHPbecamepopularforwebdevelopmentduetoitseaseoflearning,seamlessintegrationwithHTML,widespreadhostingsupport,andalargeecosystemincludingframeworkslikeLaravelandCMSplatformslikeWordPress.Itexcelsinhandlingformsubmissions,managingusersessions,interacti

TosettherighttimezoneinPHP,usedate_default_timezone_set()functionatthestartofyourscriptwithavalididentifiersuchas'America/New_York'.1.Usedate_default_timezone_set()beforeanydate/timefunctions.2.Alternatively,configurethephp.inifilebysettingdate.timez
