1. 程式人生 > >php的instanceof和判斷閉包Closure

php的instanceof和判斷閉包Closure

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