blue7wings
V2EX  ›  PHP

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

  •  
  •   blue7wings · Jun 24, 2015 · 15923 views
    This topic created in 4157 days ago, the information mentioned may be changed or developed.

    现在可以这么写了:

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

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

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

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

    如果要这样写,你直接找个强类型语言用算了
    zakokun
    zakokun
    Jun 25, 2015
    24
    形参中声明类型很早就支持了.我觉得主要是方便ide智能提示...
    鸟哥不是说php7配置文件中支持开启变量强类型了么
    aliang032
    aliang032
    Jun 25, 2015
    25
    支持强类型+1
    66beta
    66beta
    Jun 25, 2015
    26
    楼主是要弄死java?
    bombless
    bombless
    Jun 27, 2015
    27
    这个东西……它好像叫向量标注?(逃
    fantiq
    fantiq
    Dec 10, 2016
    28
    建议支持强类型
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1292 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 123ms · UTC 17:23 · PVG 01:23 · LAX 09:23 · JFK 12:23
    ♥ Do have faith in what you're doing.