PHP项目的“苦逼”经历与考虑
PHP项目的“苦逼”经历与思考
PHP项目的“苦逼”经历与思考
PHP零基础,但由于项目人手不够的原因,被安排到一个用户“定制”项目。该项目是用PHP生成的统计数据报表。而用户又有新的3个需求,需要在已有的代码基础上完成。
一、初识PHP
由于本人之前没有接触过PHP代码工程,所以需要花费一点时间过一下PHP的基本语法。个人感觉和C++很像,有类的定义、继承和派生,但其又比C++简化很多,没有C++、C的数据类型的概念,所有数据想用什么直接声明赋值即可。并且,其字符串很强大,可以嵌套定义,是C的字符串、结构体、联合体、枚举类型等的组合体,可谓“一专多能”。
做到对基本语法有大致的了解,一些通用函数基本是现用现查。
二、代码结构梳理
定制项目的特点:在已有功能相对完善的基础上,增加或修改新的功能,以达到用户的“定制”需求。需求会有《**需求说明书》可供参考。
因为项目周期短,基本是直奔主题。期间采用了“关键字”搜索的方法,缩小代码范围。但由于代码结构甚是庞大,且“先辈”少给代码注释,整个代码的跟进进展一直很慢。没有方向感,感觉代码“跳来跳去”,又回头初始读的地方,“串不成线”。
整个过程持续了5天,龟速前行。
三、找准“入口”、实现功能
从项目实现新功能或修改功能的“全景”统筹视角,要达到用户需求,需要以下几步:
第一步:找到“代码”新增或修改的入口点,可能不止一处,可能会涉及多个PHP文件,在走读代码的过程中,对这些“可疑点”都要堤防并标注便于自己查找的记号。
第二步:在读懂“可疑点”代码逻辑的基础上新增或修改代码,并自己反复测试,直至达到客户功能。
第三步:形成补丁包或者增量包,提交测试部门测试,待测试无误后提供用户验收。
第一步非常关键,往往会花去整个项目的近一半的时间。
期间需要结合新功能的实现及已有代码框架进行思考,以找准“入口”。如,要实现报表新增数据,数据从哪而来?数据可能和mysql数据库有关,要从数据库里获取统计分类数据,已有的数据是如何获取的?新统计数据的获取是否要修改SQL语句才能达到?如何修改?这样修改前台能显示正确吗?是不是需要先后台验证?……
四、思考
从项目高效达成目标的角度和自己欲哭无泪的苦逼经历,特思考以下几点供跨语言开发和未来项目借鉴。
第一、“工欲善其事,必先利其器”。
阅读代码初期,由于发现SourceInsight对PHP代码支持的不好,所以用Nodepad++去读代码,其不同PHP文件代码跳转的痛苦可见一斑。后来,搜索发现其实SourceInsight对PHP是支持的,网友有提供配置方法。这样,搜索关键词及代码跳转又高效了不少。再后来,从高手哪里发现,这种前台的代码实际上可以通过Subline Text2进行阅读的,试验了下,的确好用,一直用到现在。
所以,好的代码编辑、编译工具会让你思路相对顺畅,提高工作效率。
第二、“顺藤才能摸瓜”。
多么复杂的代码,只要别人能写出来并且能实现功能,我们看不懂。不要“骂娘”,不要埋怨代码注释不够,静下心来花些时间去“顺藤”,去理顺代码逻辑,这样你才能逐步建立起代码框架的整体思维。
“顺藤”一方面可以走读代码去顺,当代码逻辑非常复杂时候,可以通过打印日志的方式去打印关键函数,以此理顺代码的调用关系。两种方法结合会事半功倍。
初期,由于时间原因,可以先徒手在本上画出流程图,供走读代码参考。待项目总结时再画出规范流程图,以备后用。
“藤”理顺了,新增和修改代码就不会那么繁琐。之前也强调,“顺藤”的时间要远远大于“摸瓜”的时间。所以,前期要有耐心,切记浮躁。
第三、细节很重要。
我在修改代码时,需要往数组里新加成员。误将“dataRow”写成“dateRow”,PHP误认为是新的定义成员,并没有报语法错误。导致我在另一个PHP文件获取新增值总是获取不到。我逐步缩小范围排查,缩小至写入的区域,函数前、函数内部、函数后都新增日志打印对比。这样还是没有发现问题根源。但确认问题就出在写入部分,最后近1天时间才发现问题所在,就是前面提及的拼写错误。
其实类似的错误,一些编译环境都能通过“补全”避免掉,有的语言还会报语法错误。但细心是程序员的必备的品质,当引以为戒。
第四、不宜贪多,一个一个来。
项目需求多时,看到那么多的需求和为数不多的时间容易使得自己凌乱。所以,需求要一个一个去实现。不要一把抓,一把抓往往成为沙漏,只能抓住一点。一个小功能完成实现后,要知道自己的Next。如此Next、Next递推下去,项目就能相对紧凑的完成。
2014-6-18 pm20:58思于家中床前
作者:铭毅天下
转载请标明出处,原文地址:http://blog.csdn.net/laoyang360/article/details/32173571
如果感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

숙련된 PHP 개발자라면 이미 그런 일을 해왔다는 느낌을 받을 것입니다. 귀하는 상당한 수의 애플리케이션을 개발하고, 수백만 줄의 코드를 디버깅하고, 여러 스크립트를 수정하여 작업을 수행했습니다.

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

문자열은 문자, 숫자 및 기호를 포함하여 일련의 문자입니다. 이 튜토리얼은 다른 방법을 사용하여 PHP의 주어진 문자열의 모음 수를 계산하는 방법을 배웁니다. 영어의 모음은 A, E, I, O, U이며 대문자 또는 소문자 일 수 있습니다. 모음이란 무엇입니까? 모음은 특정 발음을 나타내는 알파벳 문자입니다. 대문자와 소문자를 포함하여 영어에는 5 개의 모음이 있습니다. a, e, i, o, u 예 1 입력 : String = "Tutorialspoint" 출력 : 6 설명하다 문자열의 "Tutorialspoint"의 모음은 u, o, i, a, o, i입니다. 총 6 개의 위안이 있습니다

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다

정적 바인딩 (정적 : :)는 PHP에서 늦은 정적 바인딩 (LSB)을 구현하여 클래스를 정의하는 대신 정적 컨텍스트에서 호출 클래스를 참조 할 수 있습니다. 1) 구문 분석 프로세스는 런타임에 수행됩니다. 2) 상속 관계에서 통화 클래스를 찾아보십시오. 3) 성능 오버 헤드를 가져올 수 있습니다.

PHP의 마법 방법은 무엇입니까? PHP의 마법 방법은 다음과 같습니다. 1. \ _ \ _ Construct, 객체를 초기화하는 데 사용됩니다. 2. \ _ \ _ 파괴, 자원을 정리하는 데 사용됩니다. 3. \ _ \ _ 호출, 존재하지 않는 메소드 호출을 처리하십시오. 4. \ _ \ _ get, 동적 속성 액세스를 구현하십시오. 5. \ _ \ _ Set, 동적 속성 설정을 구현하십시오. 이러한 방법은 특정 상황에서 자동으로 호출되어 코드 유연성과 효율성을 향상시킵니다.
