일. 서언
이 글은 블로거가 평소 메모한 작은 메모로, 평소 개발하지 못한 디테일을 개발하거나 코드를 쓸 때 최적화할 수 있는 부분을 담았다.상당수 버그가 개발의 허술함에서 비롯된 측면이 있기 때문에 모두가 머리를 맞댄다.코드 퀄리티 업 해피 스퀴즈!
2. 본문
1, 모든 항목에 새로운 기능이 추가되어야 하는 경우를 제외하고, 코드의 공용 부분은 가능한 한 변경하지 마십시오.
2, 커스텀 배열, 객체 등 다른 파일에 대해서는 기존 파일에 따라 구분한다.디버깅과 코드 최적화를 위해 개체를 배열 파일로 정의하지 마십시오.
3, 불필요한 조작에 대해서는 요청을 할 필요가 없다.예를 들어 우리의 드래그 정렬 사건이다.순서가 바뀌었을 때 HTTP 요청이 전송되도록 해야 한다.드래그만 하고 위치를 변경하지 않은 경우 요청을 보낼 필요가 없습니다.이렇게 하면 사용자의 방문량이 비교적 많은 상황에서, 큰 접근 압력은 없을 것이다
4、구조함수를 사용하라.공통의 변수나 인스턴스화가 필요한 데이터베이스 부분은 모두 넣을 수 있다.이렇게 스크립트의 다른 곳에서 사용하기 편리합니다.
5. 컨트롤러에 있는 메서드 이름을 실제 기능에 더 가깝게 붙여서 보기 쉽게 해야 합니다.
6, 편의상 전면만 검증하고 후면은 검증하지 않는 양식이 있다.사용자는 JS를 비활성화 하는 등의 방법을 통해 프론트 엔드 검증을 건너뛸 수 있기 때문에 이 시점에서 시스템의 안전성을 보장할 수 없기 때문에 백엔드 검증이 적어야 합니다.사용자 경험에서 그다지 중요하지 않은 항목, 시스템안전성이 더 중요하다.
예: 사용자가 비밀번호를 수정하고, 오래된 비밀번호 부분을 검증합니다. 만약 앞부분만 JS검증을 통과하고, 제출한 코드가 검증되지 않으면 사용자가 JS를 피해 비밀번호를 직접 수정할 수 있으므로 보안성을 보장할 수 없습니다.
7. 예를 들어 우리가 개발할 때 변수 a를 사용해야 한다
if(xx){ $a=1; }else{$a=2};
$b = $a + 1;
이와 같이 변수 a는 미리 정의되어 있지 않기 때문에 notice 에러가 된다.이때 우리 서버의 오류 수준이 notice라도 잘못 보고되면 이 부분은 bug가 된다.지금 이 순간에도 '내 고장엔 문제없지'라는 말은 무의미하기 때문에 프로그램을 쓸 때 스스로 치밀하게 하는 게 좋다.
8. 코드 호환성에 대하여.
php 5.4에서는 다음과 같은 가변 변수를 사용할 수 있다.
$a = 'php';
$$a = '저는 PHP입니다';
echo $php;//출력:PHP입니다
이 코드는 php5.4에서는 가능하지만 php7.0에서는 오류를 보고합니다: Array to string conversion
php 5.4는 ($a)의 $a를 하나의 전체로 간주하여 먼저 $a = php를 해석한 다음 첫 번째 '$` 기호를 통해 ($a == $php = 나는 PHP)로 변환하기 때문이다.그러나 php7.0에서는 코드의 엄격성이 향상되어 여기서는 ${$a}의 영역 분해 우선도를 사용하고 뒤에 변수를 괄호로 표시해야 합니다. 이것은 초등학교 때 덧셈과 뺄셈의 우선도 문제와 비슷합니다
9, SVN 또는 git 제출에 대하여
코드를 제출할 때,코드 재구성, 버그 복구, 최적화 등의 기능이 있다면 여러 번 나눠서 제출하는 것이 좋다.예를 들어 코드 재구성이 따로 제출되고 버그 복구나 최적화 모두 따로 제출됩니다.너무 많이 제출하는 것을 두려워하지 마세요. 우리가 세분화할수록 문제가 생길 때까지 기다리면 문제가 있는 부분을 직접 찾아도, 버전을 롤백해도 훨씬 더 잘 다룰 수 있습니다.이것도 개발 기법 중 하나죠.
10, 개발할 때, 사용할 것각 변수는 만일 이 변수가 존재하지 않거나 변수가 비어 있을 경우 프로그램의 정상적인 동작에 영향을 주지 않는지를 고려해야 한다.개발 시 엄밀한 논리적 사고와 조건부 판단이 프로그램의 작동 속도에 큰 영향을 미치지 않지만 그렇지 않을 경우 프로그램의 붕괴를 초래할 수 있다.
11. 전달받은 시간조건에 따라 조사문의 데이터가 실제 데이터보다 하루 적은 경우?
우선, 나의 현지 시간필드가 datetime이면 2019/03/25가 2019/03/25 00:00:00로 자동 변환되기 때문에 조회 데이터가 하루 적은 경우가 발생합니다.로컬 타임필드 유형이 date라면 조회할 때 23:59:59를 스플라이스하지 않고도 종료 시각 당일 데이터를 정확하게 얻을 수 있다.
스플라이스 스플라이스플릿 스플릿 스플릿 스플릿:
로컬 날짜 필드 유형datetime입니다. between and를 사용하여 시간 구간을 조회할 때 기억하셔야 합니다. 만약 전송된 날짜가 2019/03/25 -- 2019/03/27 이라면 타임스탬프로 바로 전환됩니다. 종료 시간은 2019/03/26 23:59:59로 27일에 해당하는 데이터입니다.그래서 받을 때
변환을 해보세요:
$time_start = isset($this->db_g_data['time_start']) ? date("Y-m-d 00:00:00", strtotime($this->db_g_data['time_start'])) : "";
$time_end = isset($this->db_g_data['time_end']) ? date("Y-m-d 23:59:59", strtotime($this->db_g_data['time_end'])) : "";
이는 날짜를 다시 포맷하는 시간과 같으며 시작 시간은 00:00:00, 종료 시간은 23:59:59로 주어진다.
12, 인용문을 사용한 후 unset에서 인용한 부분을 기억하라: https://segmentfault.com/a/1190000014126990
13. php 메모리의 최적화에 관해서도 주목할 필요가 있다. 순환 에너지가 적으면 적고 판단 조건은 순환체 밖에 있어야 한다.
참고:https://blog.csdn.net/LJFPHP/article/details/90053455
1, php 프로그램의 경우 일부 if{}else{}는 줄일 수 있으며 if{}else{}가 많아도 코드의 중복을 의미하므로 주의하시기 바랍니다.
2, 예를 들어 현재 시간 이후, 1일, 5일, 10일의 데이터를 조회한다.만약 당신이 매번 0-1, 0-5, 0-10의 쿼리를 반복한다면, 쿼리는 있습니다.중복될 뿐만 아니라 조회 속도도 점점 느려질 것이다.이럴 때는 0-1, 2-5, 6-10이라는 시간대를 이용하면 시간을 절약할 수 있다.
3. intval은 역시 적게 사용합니다. 단순 계산에서 예를 들어 12.22/1.1과 같은 경우 intval을 사용하면 계산이 정확하지 않습니다.순환 중이라기보다는 데이터가 점점 부정확해질 것이다.계산을 할 때는 정밀도 계산을 하거나 sprintf를 이용하여 포맷한다
만약 100W의 데이터가 있다면, 당신의 코드가 움직일 수 있습니까?최적화는 쓰기 시작 전이지 쓰기 시작 후가 아닙니다.。
5, 파일의 이름을 붙일 때는 항목의 이름을 붙이지 않는다. 여러 항목이 있으면 같은 파일을 공유할 수 있기 때문이다.
6, 코드 다운사이징, 일부 판단 조건, 중복 여부에 주의한다.예를 들어 sql에서 x 필드를 1로 제한하면 다음 논리에서 if를 판단할 필요가 없습니다.(x==1)의 경우, 우리가 사용한 결과 세트를 데이터베이스에서 가져와서 이미 선별해 놓았기 때문이다
1, 파일 부분의 코드를 삭제하고, 디렉토리를 삭제할 필요가 없다면, 디렉토리를 삭제하는 방법을 제외하고, 들어오는 디렉토리가 '/'가 되지 않도록 하고, 서버의 디렉토리를 모두 삭제하는 것이 좋습니다.
만약 필요하다면, 메소드에 고정 경로 접두사를 추가하세요: '/var/WWWWWWWWW/a/b'와 같이, b 디렉토리 아래의 디렉토리 파일만 삭제할 수 있습니다.
2, 네트워크에 사용되는 코드라면, curl, file_get_contens와 같은 코드는 가능한 한 가지고 있지 않고, 네트워크상의 파일이 누락되는 것을 방지하는 것이 좋습니다.뒷문 따위를 뚫다.
3, 가능한 한 모든 데이터를 첫 화면에서 찾지 마십시오. 그러면 나중에 페이지를 여는 등의 인터넷 요청이 줄어들 수 있습니다. 그러나 첫 화면 로딩 속도가 느리면 처음부터 사용자를 거부할 수 있습니다.문밖에 없으니, 어디서든 요청하시면 됩니다. 특히 자주 열지 않아도 되는 페이지 데이터는 사용해야 할 때 찾아보세요.
4. 사용하는 함수가 필요한지 주의하라. 예를 들어 우리가 사진을 업로드할 때 항상 iconv 함수를 이용하여 문자 인코딩 변환을 한다. utf-8을 gbk 형식으로 변환하여 저장하지 않도록 한다.이미지 이름은 스크래치입니다.하지만 이미지 이름을 영어나 문자열로 정했다면 굳이 이 함수를 쓸 필요가 없고, 이 함수를 사용하면 코드를 읽기 어렵게 만들 뿐이다.따라서 업무에 따라 선택해야 한다.
5, 테스트는 세심해야 한다. 문제가 있을 수 있다고 생각하면 과감하게 테스트한다.매번 버그를 내면 다른 사람들의 마음속에서 권위가 떨어지고 결국 이끌기 때문이다.문제가 생기면 곧 찾아오라고 하였으나, 사실은 반드시 너의 문제는 아니었다.
6, 스타일이나 인터페이스 링크를 인용할 때 HTTP로 시작한다.하지만 서버가 HTTP 환경이라 올려 놓으면 우리가 원하는 내용을 찾을 수 없다.. 로컬에서 정상적으로 테스트되고 업로드 서버에서도 정상적으로 사용할 수 있도록 //xxxx.com/css를 사용합니다.
즉 //로 대체합니다.
참고: https://www.jianshu.com/p/b85b048dc2fb
페이지 프로토콜에 따라 스스로 프로토콜을 선택할 수 있어 추후 프로그램 업그레이드 시에도 편리합니다
7. 대형 프로젝트의 경우 한 번 업데이트되는 데 몇 분 또는 수십 분 정도 걸릴 수 있습니다. 만약 다운타임을 하지 않고 버전을 배포한다면, 사용자가 배포 중에 프로젝트에 액세스하는 데 문제가 발생할 수 있습니다.그래서 ab발판분법, 예를 들어 루트 디렉터리가 htdocs이고 루트 디렉터리가 동급으로 a카탈로그와 b카탈로그를 새로 만들 수 있다.그리고 소프트 커넥션으로 htdocs -->a를 자동으로 연결합니다.
우리가 배포하면 소프트링크의 위치에 따라 b버전으로 자동 배포돼 사용자의 접속에 지장이 없다.배포가 끝나면 htdocs -->b를 전환해 b에 루트 디렉터리가 부드럽게 연결되면 사용자는 새 기능을 정상적으로 사용할 수 있다.그런 다음 a목록과 b목록을 동기화하면 돼 출판 과정에서 발생할 수 있는 문제를 해결할 수 있다.
8. 코드를 쓸 때는 메모리의 피크를 고려해야 합니다. 큰 배열과 관련된 경우 처리를 마치면 즉시 unset을 떨어뜨려야 합니다. 가능한 한 두 개의 큰 배열이 루프 또는 값을 전송하지 않아야 합니다. 배열이 크고 메모리 피크에 가까우면 루프 시 메모리 오버플로우 문제가 발생합니다.업무를 최적화하여 큰 배열을 사용한 후에는 즉시 unset( )을 떨어뜨리는 것이 좋다.
9, 코딩할 때는 코드 포맷에 주의해야 한다
ctrl + alt + L자동 조판 가능
ctrl + alt + O 불필요한 클래스 참조를 자동으로 삭제합니다
이 두 개의 코드를 쓸 때, 수시로 눌러서 파일 인코딩: utf8, 한 줄에 4개의 공백을 들여보내라, tab을 사용하지 말고
10, mysql의 update 업데이트, 데이터 중복인지 오류인지 판단하는 방법
php는 mysql의 update 조작을 할 때 항상 반환값에 따라 조작해야 한다.그러나 다음과 같이 사용할 때:
res = "up date x x x x x"; f (res) = "update xxxxxx"; if(res="updatexxxxx"x;if(res) {
}else{
}
이런 식으로 판단하면 sql 실행 오류와 데이터 중복 문제를 구분할 수 없다.update 작업은 0을(를) 반환하며 영향을 받는 행의 수를 나타냅니다.
이때 ===로 반환이 0인지 false인지 여부를 판단하여 false 대표 update 문장을 반환한다.작업 오류:
if($result > 0 || $result === 0){
//수정된 데이터가 원본 데이터와 같으면 false를 반환합니다
}else{
}
'개발 꿀팁 > PHP' 카테고리의 다른 글
mysql은 쿼리 결과 필드에 기본값을 사용합니다 (0) | 2022.07.21 |
---|---|
php에서 python으로 첫날 (0) | 2022.07.21 |
2021중대공장 php+go 면접 질문(1) (0) | 2022.07.21 |
php 엑셀 파일 demo 읽기 및 python과의 성능 비교 (0) | 2022.07.21 |
PHP의 CI 프레임워크 학습 (0) | 2022.07.21 |