因公需要,搞起了php,它越来越让我觉得反胃.  代码里到处都是if empty if empty
    if(!empty($CFG->aaaa)){}   
    搜索一下$CFG->aaaa从未出现过,当场吐血,然后多吐了几次就不吐了.
   
    另外,到处都是以下形式的代码,反胃
    if(){}else{
       if(){
          
       }else{        }
    }  最让我郁闷的是
   $a = NULL;
   $a->a = 'bbb'; 这样尽然没错,NULL是没有意义的,完全就可以不使用stdClass了     弱类型在javascript中演绎得如此优雅,而在php中却如此恶心
  从此我爱上了js中的未定义变量异常,至少解释器提示了我.  这种不声明便可以使用的变量给调试,阅读带来了无尽的痛苦.
  
  抱怨归抱怨,血还是要接着吐,请高手指教php编程之道,这样或许能少吐.   php的编程模式是否是显示页面与处理页面分离?
  还是都同一个页面,使用if else判断?  如果是分离的,如何实现服务器端跳转? 即在一次请求内执行流程经过多个页面,require或include?  
   

解决方案 »

  1.   

    强类型还是弱类型,都有各自的优缺点,不能一概而论,强类型编译质量高,代码运行快。弱类型则更灵活。
    尽管php是弱类型语言,但是,良好的实践告诉我们,使用变量前先初始化是一个良好的习惯,不仅便于阅读,而且可以避免很多莫名其妙的错误。
    而且,php开发的优点就是快速,轻便,如果使用强类型,恰恰违反了它的初衷。
      

  2.   

    处理页面和展现页面还是分开比较好吧?至于跳转现在基本上都是用框架我也是刚转到php不久的,弱类型的确让我很不习惯,但我超喜欢用关键字做键的数组,很好用~
      

  3.   


      php的编程模式是否是显示页面与处理页面分离?
      还是都同一个页面,使用if else判断?php有很多优秀的mvc框架
      

  4.   

    PHP的弱类型使用起来还是很方便的。至于你觉得它恶心,那只是你没上手。
    起码,弱类型使用起来便洁,现在我们用OOP模式开发,可以做到将成员属性集中在类中声明,这样便于管理。
    再想,一个页面中,变量的个数毕竟是有限的,还不至于让人无法追踪变量的地步。
    如果你真不习惯它这种模式,那你可以这样:开启PHP的错误级为所有,然后将变量集中起来初始化,这样就行了。eg:<?php
      error_reporting(E_ALL);
      $a='a';$b='b';
      echo $a;
      echo $c; //$c没有初始化,所以会抛出NOTICE级错误提示,便于你规范化代码。
    ?>
      

  5.   

    PHP本身就是嵌入式的,所以它设计时并没有考虑到分层处理。
    不过,现在MVC可以将表现层与数据处理层分离。
      

  6.   


    如果你看了moodle的源码 你不会这样说 
      

  7.   


    代码是有灵魂的。对于同种语言,不同水平的程序员会写出不同的代码。如果PHP真不方便,让人恶心,那淘宝绝对不会选PHP来开发。
      

  8.   

    php 前几名,不是浪出来的. 你说的缺点,反而是这个语言的优点..php也不是万能的,有好的方案的,就用好的,没有的话,最好站在前人的思路上看问题.
      

  9.   


    一般的大门户站,不会全部用一种技术。淘宝也不止用到PHP一种技术。
      

  10.   

    还觉得php的面向对象很是鸡肋
      

  11.   

    PHP的弱类型使用起来还是很方便的,
    与强类型没有明显的分界线。
      

  12.   

    $a = null;
    $a->fk = 'fk';null不是null 没有意义
      

  13.   

    既然是不知道,那就不要装作知道你不愿意,也没谁强迫你去用
    说不好听的,php 这个行当不是人少了,而是人多了!什么样的人都去钻营 php ,搞的 php 程序员只能挣扎在温饱线上
      

  14.   

    不知道在这抱怨什么? 老大说到了重点。。真的是不懂装懂。
    我倒觉得js那鬼东西难搞死了。。调试真尼玛费劲,稍微一出错还要借助工具才能有错误提示(当然ie不需要啦),而且后面都显示不了。还要担心各种浏览器兼容。
      

  15.   


    试问 : $a 与 $a->fk 是什么关系??
      

  16.   

    谢谢你提的这个问题,不试不知道,一试吓一跳。
    我以前也没注意到:
    在PHP中,这样的写法: $obj->val  ,如果$obj不是一个实例对象,那么PHP会将 $obj->val 当成一个变量,不信大家试试:<?php
      echo $A->val;
    ?>
    运行以上代码,页面不会有任何输出;我们来更改下代码:<?php
      error_reporting(E_ALL);
      echo $A->val;
    ?>运行此代码,会报错:“Notice: Undefined variable: A in ....”,“Notice: Trying to get property of non-object in ....”
    此处,PHP还是将$A->val 当成类成员属性操作接下来,我们再来修改下代码:<?php
      error_reporting(E_ALL);
      $A->val='http://www.net920.cn';
      echo $A->val;
    ?>运行此代码,会输出字符串:“http://www.net920.cn”,由此我们可知,PHP将 $A->val尝试当成变量解析了。
      

  17.   

    如果$a是一个实例化对象的引用,那么$a=NULL,就是显式销毁该实例化对象了,可以配合 __destruct看到效果。
    而PHP对于 $a->b 这种写法本身是认可的,当然也不会报任何错误。
      

  18.   


    抱怨归抱怨 知识还是要学 多谢NET920指教了$a=NULL
    $a->b = ""; 
    以上代码我本来的理解就是,$a都是NULL了,怎么还可以使用$a呢??换成c++
    obj* a = new obj();
    a = 0;
    a->pro = "ss"; //这里显然是崩溃
      

  19.   


    只能讲每种语言设计思路不同,各有特点,PHP这种思维的确让人有点想不通。
      

  20.   

    不懂装懂,你配置过APACHE 警告级别了?你设置显示错误信息了?
      

  21.   


    PHP一直强调变量不需要定义,那你去配置警告级别干什么??$a->b 这种情况,PHP会尝试将它解析为变量的。
    还有,不是APACHE警告级别,是PHP警告级别!
      

  22.   

    个人觉得弱类型恰好是zend非常巧妙的一个设计
      

  23.   

    现在不就web,就说C++,从信息角度来考虑,人类需要数据类型吗。我们的用户不会知道这些的,也不关心这些的。数据类型大部分是计算机硬件,程序所需要的,而我们的用户只想要一个html内容的字符串。相信我,一个web程序员要解决的问题够多了。很可能一个产品需求上的改动,就会让你血压飚升了。我做过一个扩展,把一段加密算法集成到php中,遇到第一个问题,就是c语言连接两个字符串的功能也要我来解决。弄不好还会内存泄漏。当然还遇到你说的数据类型问题。一个int型在32和64机上字节位数是不一致的。不过我现在非常喜欢C。觉得c才是万能的,再说java,当初看到java,就有背单词的感觉。导制现在也没学会。不过对应用来说,这些都不重要。能够快速实现一个需求,才能体现出更多的经济价值。拿webgame来说吧,早一天上线说会早一天挣钱。
      

  24.   

    常在这个区里混的,大多对 PHP 都是有感情的。楼主上来就“反胃”,可能伤了不少人的感情,引出了一些言辞激烈的指责,并不意外。难得的是,楼主自始至终保持了温和克制的言辞态度,依我个人所见,在 CSDN 实属难得,单为这个就值得赞一个!弱类型的利弊,见仁见智啦。即使对一个人来说,也会随着了解程度的不同而可能发生变化。比如我自己,以前也是玩 C/C++/Java 的,也是因工作需要开始搞 PHP 的。刚接触 PHP 的时候,感觉它就像韦小宝,虽然所向无敌,但毕竟是个混混,从心眼里还是看不起它。用到现在,我觉得它更像张无忌,武功盖世自不必说,虽然混迹江湖,但武功绝学也都颇有来路,不能说都是野路子。当然有时也不免怀念起 Java 那种玄门正宗的优雅大气。实用为王。不同的技术,一定有它们各自擅长的应用领域。一定要简单地分出个高下,并不现实。
    ————————————————————————————————
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
      

  25.   

    呵呵  多亏我是从php开始学的  现在用java什么的还比较不习惯呢!
      

  26.   


    没有类型增加了调试的困难,而到处都是if(empty($a)) 
      

  27.   

     悲催, 你这是遇到了.初级程序员写的代码... 阿弥托福,,, 希望楼主. 看点好的 PHP源代码...初级的大便 就让他随风而死吧...........