zoukankan      html  css  js  c++  java
  • 类型约束

    昨天写序列的时候,为了约束参数类型为string,就写了下面这段代码

    function createNext(string $pre, $elem = '', $count = 0)
    {
    
    	//
        
    }
    

      我本意是想限定$pre一定要是string,但是当我真的传了一个string过来的时候,却报了如下错:

    Argument 1 passed to createNext() must be an instance of string, string given, called in

    最终,翻PHP 手册,得到如下解释

    PHP 5 可以使用类型约束。函数的参数可以指定必须为对象(在函数原型里面指定类的名字),接口,数组(PHP 5.1 起)或者 callable(PHP 5.4 起)。不过如果使用 NULL 作为参数的默认值,那么在调用函数的时候依然可以使用 NULL 作为实参。

    如果一个类或接口指定了类型约束,则其所有的子类或实现也都如此。

    类型约束不能用于标量类型如 int 或 stringTraits 也不允许。

    但是在PHP7的升级说明中间,有明确提出

    标量类型声明 有两种模式: 强制 (默认) 和 严格模式。 现在可以使用下列类型参数(无论用强制模式还是严格模式): 字符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool)。它们扩充了PHP5中引入的其他类型:类名,接口,数组和 回调类型。

    另外关于类型,PHP7还支持返回类型提示:

    abstract class Test
    {
        abstract public function getSum(): int
    }

    则可以直接限定子类中该方法的返回值为int型。

    从解释中可以看到,callable,也是一种类型限定条件。一般当参数为匿名参数的时候,我都会这么写

    function testFunction(Closure $callback)
    { 
        if(is_callable($callback)) {
          //
        }
    }

    现在是不是就可以直接用callable代替closure,并且省掉is_callable的判断了呢

     附上一张截图

  • 相关阅读:
    ios 数据类型转换 UIImage转换为NSData NSData转换为NSString
    iOS UI 12 block传值
    iOS UI 11 单例
    iOS UI 08 uitableview 自定义cell
    iOS UI 07 uitableviewi3
    iOS UI 07 uitableviewi2
    iOS UI 07 uitableview
    iOS UI 05 传值
    iOS UI 04 轨道和动画
    iOS UI 03 事件和手势
  • 原文地址:https://www.cnblogs.com/buerr/p/7325639.html
Copyright © 2011-2022 走看看