V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
funwee
V2EX  ›  PHP

php 有内置方法可以将字符串转表达式的么?

  •  
  •   funwee · 2014-03-04 11:04:57 +08:00 · 4202 次点击
    这是一个创建于 3919 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天有人来问一个的问题

    if(expr){
    echo '成立';
    }else{
    echo '不成立';
    }

    一个在普通不过的判断语句了,可那人把判断表达式(expr)用一个变量来存储
    结果怎么执行都为真 原因应该是被当成字符串来处理了吧
    我查了下 好像没有能把字符串转表达式的方法,如果非要这么实现,应该怎么处理?
    为啥v2ex 不能用tab 囧
    14 条回复    1970-01-01 08:00:00 +08:00
    funwee
        1
    funwee  
    OP
       2014-03-04 11:12:09 +08:00
    没人来科普下么 囧
    看来越是简单的问题,越是坑啊!!!
    shiny
        2
    shiny  
       2014-03-04 11:16:35 +08:00
    为什么要这么做………… eval 呀,但是有安全隐患,谨慎使用。
    一定是设计有问题。
    shiny
        3
    shiny  
       2014-03-04 11:18:37 +08:00
    另外建议从头到尾读手册三遍,每次读都有收获。
    likexian
        4
    likexian  
       2014-03-04 11:21:50 +08:00   ❤️ 1
    funwee
        5
    funwee  
    OP
       2014-03-04 11:26:27 +08:00
    @shiny 没问他为啥要这么做 只是单纯实现上考虑 要怎么实现 eval好像也不行啊 囧
    shiny
        6
    shiny  
       2014-03-04 11:28:37 +08:00   ❤️ 1
    @funwee 拼接一个 return 来返回执行后的变量。likexian 说的 assert 看上去也很适合你的场景。
    funwee
        7
    funwee  
    OP
       2014-03-04 11:30:18 +08:00
    @likexian 搞定 看来手册还是要多看才行
    funwee
        8
    funwee  
    OP
       2014-03-04 11:31:20 +08:00
    @shiny 嗯 assert确实可以搞定这种情况 嘿 看来手册还是不够熟 我找了好久都没找到合适的
    shiny
        9
    shiny  
       2014-03-04 11:33:09 +08:00
    @funwee 看了 assert 的用法我也觉得我手册读少了哈哈,而且测试也写少了……
    xdazz
        10
    xdazz  
       2014-03-04 11:53:40 +08:00
    问题是你这个表达式从哪里来的,用户输入? 第三方API的结果? 这样的代码,我只能闻到bad smell.
    anewg
        11
    anewg  
       2014-03-04 11:54:49 +08:00
    funwee
        12
    funwee  
    OP
       2014-03-04 13:13:56 +08:00
    @xdazz 我并没有去追问他为什么要这样写 只是好奇最终该如何去实现这个奇葩的需求...
    oott123
        13
    oott123  
       2014-03-04 14:22:29 +08:00 via Android
    这种需求有种不可控的感觉…用起来不会感觉不安么?
    另外贴小段代码的话贴到 gist 里面比较好。
    ichou
        14
    ichou  
       2014-03-05 10:01:27 +08:00
    这种用法虽然很有用 但是是个不安定因素 不能确信处理好所有可能的情况建议慎重点
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5759 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:37 · PVG 09:37 · LAX 17:37 · JFK 20:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.