V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Sponsored by
LinkedIn
不坐班的神仙工作 · 去任何你想去的地方远程,赚一线城市的工资
2000 个不用出门 Social 的全球远程工作,帮助 V2EX 的小伙伴开启全新的工作方式。
Promoted by LinkedIn
blue7wings
V2EX  ›  PHP

PHP7 为什么不直接支持变量类型声明,而仅仅是在函数参数中定义?

  •  
  •   blue7wings · 2015-06-24 19:03:22 +08:00 · 13998 次点击
    这是一个创建于 2650 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在可以这么写了:

    function func(int $param_1,int $param_2){
        return $param_1 + $param_2;
    }
    
    $result = func('23',23.44);//47
    

    我觉得能够这样写就更好了:

    int $param_1 = 1;
    string $param_2 = "hello world";
    

    PHP7 Reference: https://github.com/tpunt/PHP7-Reference
    安装小教程: http://www.blue7wings.com/post/91

    我觉得还是强类型好,各位小伙伴如何认为?(:

    28 条回复    2016-12-10 00:25:23 +08:00
    cst4you
        1
    cst4you  
       2015-06-24 19:09:19 +08:00
    你可以 $param_1 = (int)1;
    nightspirit
        2
    nightspirit  
       2015-06-24 23:03:16 +08:00
    因为这样的话对于之前的几个版本 变动太大了,虽然仅仅现在这样就已经搞的很不兼容了,但还是要考虑向下兼容问题。
    ffffwh
        3
    ffffwh  
       2015-06-24 23:21:20 +08:00
    函数一般是一个人写的,类型自己清楚。

    本地变量的类型推导是比较简单的,只要给出函数参数类型,就能写出type checker,从而提前保证类型安全。

    当然函数参数的类型也能推导,这就比较复杂了(unification?)。
    chaucerling
        4
    chaucerling  
       2015-06-24 23:34:30 +08:00
    动态语言就是变量没类型,值才有类型
    jadecoder
        5
    jadecoder  
       2015-06-25 01:25:20 +08:00
    语言和用户互相影响。现在用PHP的人应该都习惯了弱类型,就没必要增加这个feature。喜欢强类型的人可以选择别的语言
    cevincheung
        6
    cevincheung  
       2015-06-25 04:48:17 +08:00
    function e(string $param1,string $parma2):int
    echo e('1',2.33333333)
    banri
        7
    banri  
       2015-06-25 04:58:05 +08:00 via iPhone
    这…JS都不敢大声说话了
    flowfire
        8
    flowfire  
       2015-06-25 05:03:20 +08:00
    php本来就是弱类型的语言,你非要人家转型。。。
    kn007
        9
    kn007  
       2015-06-25 07:52:39 +08:00
    为何一定要强类型
    neilwong
        10
    neilwong  
       2015-06-25 08:23:16 +08:00 via iPhone
    通过赋值转换类型是脚本语言的最大特色了吧,而且函数上规定类型也是可选的,只是方便了做类型校验。如果变量也可以声明类型,那就需要增加一种表示方法了,例如#a或者$$a这种,和原本的区分开,表示此变量类型无法转化
    ruchee
        11
    ruchee  
       2015-06-25 08:41:19 +08:00   ❤️ 1
    主要是考虑兼容性了,良好的向下兼容是PHP得以持续发展的秘密武器,反面例子可参考Python3与Perl6
    blue7wings
        12
    blue7wings  
    OP
       2015-06-25 08:50:01 +08:00 via iPhone
    应该是兼容的问题了,保证了php7和之前版本的兼容,而不是像python3和python2...
    demonchang
        13
    demonchang  
       2015-06-25 09:22:16 +08:00
    - -! 顶一个
    anyforever
        14
    anyforever  
       2015-06-25 09:36:21 +08:00
    mahone3297
        15
    mahone3297  
       2015-06-25 09:46:16 +08:00
    支持强类型。。。
    irgil
        16
    irgil  
       2015-06-25 09:55:39 +08:00
    支持强类型的
    Actrace
        17
    Actrace  
       2015-06-25 11:16:51 +08:00
    5.6也可以这么玩,而且可以指定一个类的类型,
    比如 class A ,那么在调用的时候可以 function a(A $param)
    LaughingMeMe
        18
    LaughingMeMe  
       2015-06-25 14:22:53 +08:00
    $intA,$strB,$arrC,$objD
    jsq2627
        19
    jsq2627  
       2015-06-25 14:39:44 +08:00 via iPhone
    我记得函数参数的类型只能算得上“类型提示”,没有严格检查的。这种写法用的多的地方应该是依赖注入吧。
    lincanbin
        20
    lincanbin  
       2015-06-25 14:55:12 +08:00
    为什么不用C++呢?
    notcome
        21
    notcome  
       2015-06-25 15:50:23 +08:00 via iPhone
    没必要,这些都可以 infer 出来。

    此外,楼主很在意类型安全的话,可以来用用 Haskell,及其独有 TDD,我是说 Type Driven Development。除了 dependent type,Haskell 还有 refinement type checker,比如说在函数签名上可以直接标记接受所有大于零的整数,编译器就能给你检查出所有可能有问题的调用——对处理用户输入特别有帮助哦。
    irgil
        22
    irgil  
       2015-06-25 16:34:36 +08:00 via Android   ❤️ 1
    @jsq2627 7支持强类型,而且可以在php.ini设置必须使用强类型
    fuxiaohei
        23
    fuxiaohei  
       2015-06-25 17:53:38 +08:00
    int $param_1 = 1;
    string $param_2 = "hello world";

    如果要这样写,你直接找个强类型语言用算了
    zakokun
        24
    zakokun  
       2015-06-25 17:56:34 +08:00
    形参中声明类型很早就支持了.我觉得主要是方便ide智能提示...
    鸟哥不是说php7配置文件中支持开启变量强类型了么
    aliang032
        25
    aliang032  
       2015-06-25 18:10:42 +08:00
    支持强类型+1
    66beta
        26
    66beta  
       2015-06-25 18:27:38 +08:00
    楼主是要弄死java?
    bombless
        27
    bombless  
       2015-06-27 21:59:17 +08:00
    这个东西……它好像叫向量标注?(逃
    fantiq
        28
    fantiq  
       2016-12-10 00:25:23 +08:00
    建议支持强类型
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4200 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 09:47 · PVG 17:47 · LAX 02:47 · JFK 05:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.