php的instanceof和判斷閉包Closure
阿新 • • 發佈:2017-12-11
int gpo xtend return body 匿名函數 對象 類型 php
類型運算符
instanceof 用於確定一個 PHP 變量是否屬於某一類 class 的實例,在此之前用 is_a(),但是後來 is_a() 被廢棄
<?php class MyClass { } class NotMyClass { } $a = new MyClass; var_dump($a instanceof MyClass); var_dump($a instanceof NotMyClass); ?>
以上例程會輸出:
bool(true) bool(false)
instanceof 也可用來確定一個變量是不是繼承自某一父類的子類的實例:
Example #2 對繼承類使用 instanceof
<?php class ParentClass { } class MyClass extends ParentClass { } $a = new MyClass; var_dump($a instanceof MyClass); var_dump($a instanceof ParentClass); ?>
以上例程會輸出:
bool(true) bool(true)
Closure 類
用於代表 匿名函數 的類.
匿名函數(在 PHP 5.3 中被引入)會產生這個類型的對象。在過去,這個類被認為是一個實現細節,但現在可以依賴它做一些事情。自 PHP 5.4 起,這個類帶有一些方法,允許在匿名函數創建後對其進行更多的控制。
除了此處列出的方法,還有一個 __invoke 方法。這是為了與其他實現了 __invoke()魔術方法 的對象保持一致性,但調用匿名函數的過程與它無關。
類摘要
Closure { /* 方法 */ __construct ( void ) public static Closure bind ( Closure $closure , object $newthis [, mixed $newscope = ‘static‘ ] ) public Closure bindTo ( object $newthis [, mixed $newscope = ‘static‘ ] ) }
Table of Contents
- Closure::__construct — 用於禁止實例化的構造函數
- Closure::bind — 復制一個閉包,綁定指定的$this對象和類作用域。
- Closure::bindTo — 復制當前閉包對象,綁定指定的$this對象和類作用域。
判斷是不是閉包
if ( $this->{$method} instanceof Closure ) { return call_user_func_array($this->{$method},$args); } else { throw new Exception("Invalid Function"); } //一切都要自行測試 if ( $class instanceof Closure ) { } else { }
參考:http://php.net/manual/zh/language.operators.type.php
http://php.net/manual/zh/class.closure.php
php的instanceof和判斷閉包Closure