PHP7 为什么不直接支持变量类型声明,而仅仅是在函数参数中定义? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
blue7wings
V2EX    PHP

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

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

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

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

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

    如果要这样写,你直接找个强类型语言用算了
    zakokun
        24
    zakokun  
       Jun 25, 2015
    形参中声明类型很早就支持了.我觉得主要是方便ide智能提示...
    鸟哥不是说php7配置文件中支持开启变量强类型了么
    aliang032
        25
    aliang032  
       Jun 25, 2015
    支持强类型+1
    66beta
        26
    66beta  
       Jun 25, 2015
    楼主是要弄死java?
    bombless
        27
    bombless  
       Jun 27, 2015
    这个东西……它好像叫向量标注?(逃
    fantiq
        28
    fantiq  
       Dec 10, 2016
    建议支持强类型
    About     Help     Advertise     Blog     API     FAQ     Solana     5620 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 12ms UTC 07:09 PVG 15:09 LAX 00:09 JFK 03:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86