당신은 호박 사탕과 사이다에 대한 준비가 되셨습니까? 연례 할로윈이 다시 여기에 있습니다! 전 세계의 광신주의는 미국만큼 좋지는 않지만 여전히이 축제를 축하하기위한 "끔찍한"PHP 팁을 공유하고 싶습니다. 이 게시물은 쉽고 재미 있으며 PHP 자체의 놀라운 (그러나 논리적 인) 행동뿐만 아니라 일부 사람들이 PHP를 사용하여 작업을 완료하는 소름 끼치는 (매우 비논리적 인) 동작을 보여줄 것입니다. 당신은 그것을 나의 휴가 선물, 프로그래머의“영적 사탕”으로 생각할 수 있습니다. 결국, 사탕은 왜 그것을 모든 진미를주지 않는 아이들만이?
키 포인트 요약
PHP는 첫 번째
PHP를 사용하여보다 복잡한 작업 (예 : 쉘 스크립트)을 수행 할 때 포크시 실행 환경이 어떻게 복제되는지, 모든 프로세스에서 다양한 자원이 어떻게 영향을 받는지 이해하는 것이 중요합니다. 예를 들어, 데이터베이스에 연결할 때 포크 아동 프로세스 후 부모 프로세스에 연결하는 것이 가장 좋습니다. 필요한 경우 아동 프로세스가 자체적으로 연결됩니다.
싱글 톤 패턴 (실제로 멋진 객체 지향 글로벌 변수에 지나지 않음)은 디버깅을 어렵게 만들 수 있습니다. 가능할 때마다 싱글 톤 모드를 피하는 것이 좋습니다.
"Spooky Scary PHP"와 같은 비 전통적인 코딩 관행은 흥미롭고 교육적이지만, 비효율적 인 사용, 불분명 또는 예측할 수없는 기능을 포함하기 때문에 일반적으로 생산 코드 작성에 대한 모범 사례로 간주되지 않습니다.
foreach
hazed 어레이
옛날 옛적에, 그다지 원하지 않는 개발 스튜디오에서 Arthur는 여전히 늦은 밤에 코드를 작성하고있었습니다. 그는 자신이 사용하려는 배열이 귀신이라는 것을 몰랐습니다! 키보드를 탭하면서 그는 척추에서 차가운 미끄러짐을 느꼈지만 어리석게이 미묘한 예고를 무시했습니다.
좋아요,이 배열은 실제로 유령이 아니지만 출력은 실제로 예상치 못한 것입니다.
이 "끔찍한"행동의 이유는 PHP가 첫 번째 루프 외부에서 참조를 유지하는 방법입니다. 두 번째 루프가 시작되면 는 여전히 기준이며 배열의 마지막 요소를 가리 킵니다. 두 번째 루프의 첫 번째 반복은 "double"을 에 할당하여 마지막 요소를 덮어 씁니다. 두 번째 반복은 "수고"를 에 할당하여 마지막 요소를 다시 덮어 씁니다. 루프가 마지막 요소의 값을 읽으면 여러 번 덮어 씁니다. 이 행동에 대한 통찰력을 얻으려면 Johannes Schlüter의 블로그 게시물 인 "References and Foreach"를 읽는 것이 좋습니다. 이 약간 수정 된 버전을 실행하고 출력을 확인하여 PHP가 수행하는 작업을 더 잘 이해할 수 있습니다.<?php
$spell = array("double", "toil", "trouble", "cauldron", "bubble");
foreach ($spell as &$word) {
$word = ucfirst($word);
}
foreach ($spell as $word) {
echo $word . "n";
} 로그인 후 복사
로그인 후 복사
Arthur는 그날 밤 매우 중요한 교훈을 배웠고 배열 키로 코드를 수정하여 문자열을 재 할당했습니다.
<🎜 🎜> <<> 고스트 데이터베이스 연결 <🎜 🎜>
PHP는 매일 웹 페이지를 생성하도록 요구하는 것이 아니라 점점 더 많은 요청을 받고 있습니다. PHP에 작성된 쉘 스크립트의 수가 증가하고 있으며 개발자가 개발 언어를 통합하는 이점을 보면서 이러한 스크립트에서 수행하는 작업이 점점 더 복잡해지고 있습니다. 일반적으로 이러한 스크립트의 성능은 허용되며 편의를 위해 이루어진 트레이드 오프가 입증되었습니다. 따라서 Susan은 코드가 다음과 유사한 병렬 처리 작업을 작성하고 있습니다.
<code>Double
Toil
Trouble
Cauldron
Cauldron</code> 로그인 후 복사
로그인 후 복사
그녀의 코드는 아동 프로세스가 장기 실행 작업을 동시에 수행하기 위해 포기하는 반면, 부모 프로세스는 아동 프로세스를 계속 모니터링하고 모든 어린이가 종료 될 때 결과를보고합니다.
그러나 그러나 Susan의 리더십은 그녀에게 표준 출력으로 출력하는 대신 상태 정보를 로그에 로그에 로그로 기록하도록 요청했습니다. Susan은 회사의 코드 기반에 이미 포함 된 싱글 톤 패턴 PDO 데이터베이스 연결 메커니즘을 사용하여 코드를 확장했습니다.
Susan은 테이블의 행이 업데이트되는 것을 기대합니다. 프로세스. 불행히도, 실행은 예외를 던지고 데이터베이스는 그녀의 기대를 반영하지 않습니다.
<?php
$spell = array("double", "toil", "trouble", "cauldron", "bubble");
foreach ($spell as &$word) {
$word = ucfirst($word);
}
var_dump($spell);
foreach ($spell as $word) {
echo join(" ", $spell) . "n";
} 로그인 후 복사
Arthur의 배열처럼 Susan의 데이터베이스가 잊혀 졌습니까? 글쎄, 내가 당신에게 다음과 같은 단서를 주면, 당신 이이 미스터리를 함께 할 수 있는지 확인하십시오. 이 복제 된 프로세스는 그 이후로 병렬로 실행됩니다. 2. 정적 멤버는 클래스의 모든 사례 중에서 공유됩니다.
PDO 연결은 싱글 톤으로 래핑되므로 응용 프로그램의 모든 참조는 메모리의 동일한 리소스를 가리 킵니다. 먼저 객체 참조, 부모 프로세스 포크를 반환하고, 아동 프로세스가 계속 처리되고, 부모 프로세스가 대기하고, 하위 프로세스가 종료되고 PHP가 사용 된 리소스를 정리 한 다음, 부모 프로세스는 데이터베이스 개체를 사용하려고합니다. 다시. 하위 프로세스에서 MySQL과의 연결이 닫히므로 최종 통화가 실패합니다. 최종 로깅 쿼리 전에 순진하게 연결을 시도하면 Susan이 싱글 톤이기 때문에 동일한 실패한 PDO 인스턴스가 반환되기 때문에 Susan에 도움이되지 않습니다. 나는 싱글 톤을 피하는 것이 좋습니다 - 그들은 정말 멋진 객체 지향적 인 글로벌 변수이므로 디버깅을 어렵게 만듭니다. 우리의 경우에도 아동 프로세스에 의해 연결이 여전히 닫히지 만 두 번째 쿼리 전에 <?php
foreach ($spell as $key => $word) {
$spell[$key] = ucfirst($word);
} 로그인 후 복사
가 호출되면 적어도 싱글 톤없이 새 연결을 반환합니다. 그러나 더 나은 방법은 포크시 실행 환경이 어떻게 복제되는지, 모든 프로세스에서 다양한 자원이 어떻게 영향을 받는지 이해하는 것입니다. 이 경우 포크 아동 프로세스 후 부모 프로세스의 데이터베이스에 연결하는 것이 가장 좋습니다. 필요한 경우 아동 프로세스가 자체적으로 연결됩니다. 연결을 공유해서는 안됩니다.
#! /usr/bin/env php
<?php
$pids = array();
foreach (range(0, 4) as $i) {
$pid = pcntl_fork();
if ($pid > 0) {
echo "Fork child $pid.n";
// record PIDs in reverse lookup array
$pids[$pid] = true;
} else if ($pid == 0) {
echo "Child " . posix_getpid() . " working...n";
sleep(5);
exit;
}
}
// wait for children to finish
while (count($pids)) {
$pid = pcntl_wait($status);
echo "Child $pid finished.n";
unset($pids[$pid]);
}
echo "Tasks complete.n"; 로그인 후 복사
<<> Dr. Frankenstein의 API<'s> Mary Shelley의 "Frankenstein"은 과학자가 삶을 창조하는 이야기를 들려 주지만, 추악함에 혐오감을 느끼고 그것을 포기합니다. 불필요한 죽음과 파괴 후, 프랑켄슈타인 박사는 세상이 끝날 때까지 그의 창조물을 추구하여 그것을 파괴하려고 노력했습니다. 우리 중 많은 사람들이 우리가 나중에 우리가 탈출 할 수 있기를 바라는 그런 추악한 코드의 삶을주었습니다. 코드는 너무 못 생겼고 칙칙해서 혼란스러워서 우리가 구토를 원하지만 사랑과 이해를 원합니다. 몇 년 전 저는 데이터베이스 인터페이스에 대한 아이디어와 UNIX의 "모든 것이 파일"이라는 철학을 더 엄격하게 따르는 경우 어떻게 보일지에 대한 아이디어를 가지고 놀았습니다. 쿼리는 "파일"에 기록됩니다. "파일"에서 읽으십시오. 한 가지가 다른 죽음과 파괴적인 코딩 후에는 다른 생각과 거의 관련이없는 다음 수업을 썼습니다. .
결과는 천재이지만 역겨운 : 객체처럼 보이는 인스턴스 (실제 API 메소드), 배열 또는 문자열 ... <🎜 🎜>
<?php
$spell = array("double", "toil", "trouble", "cauldron", "bubble");
foreach ($spell as &$word) {
$word = ucfirst($word);
}
foreach ($spell as $word) {
echo $word . "n";
} 로그인 후 복사
로그인 후 복사
나는 그 직후에 블로그를 썼고 그것을 악으로 표시했습니다. 거의 모든 것을 본 친구들과 동료들은 "좋아요! 지금은 그것을 죽이고 있습니다. 그것이 실제로 위반하는 유일한 규칙은 <🎜 🎜> 및 <🎜 🎜>와 같은 블랜드 이름 지정 방법에 대한 프로그래머의 기대입니다. 대신 쿼리 문자열 자체를 쿼리 메소드로 사용하고 객체는 인터페이스이며 결과 세트는 결과입니다. 물론 SQL 쿼리처럼 보이지만 더 많은 를 갖는 <🎜 🎜> 및
메소드를 링크하는 과도하게 일반화 된 ORM 인터페이스보다 나쁘지 않습니다. 어쩌면 내 수업은 그렇게 악하지 않습니까? 그냥 사랑 받고 싶어할까요? 물론 나는 북극에서 죽고 싶지 않습니다! <code>Double
Toil
Trouble
Cauldron
Cauldron</code> 로그인 후 복사
로그인 후 복사
결론 query()
나는 당신 이이 게시물을 즐겼기를 바랍니다.이 사례들이 당신을 (너무 많은) 악몽을 가져 오지 않기를 바랍니다! 나는 또한 당신이 유령이거나 끔찍한 코드에 대한 자신의 이야기를 가지고 있다고 생각합니다. 당신이 어디에 있든, 당신은 휴가를 즐겁게 보내주지 않아도되므로 아래의 의견에서 끔찍한 PHP 이야기를 자유롭게 공유하십시오! Fotolia의 사진 result()
select()
where()
(다음은 원래 콘텐츠에 따라 조정 및 간소화 된 FAQ입니다)
->
"Spooky Scary PHP" 에 대한 질문이 자주 묻습니다
"Spooky Scary PHP"란 무엇입니까?
"Spooky Scary PHP"는 특정 결과를 달성하기 위해 독창적이거나 예기치 않은 방법을 사용하는 고유 한 PHP 인코딩 방법입니다. 여기에는 덜 알려진 기능을 사용하고 언어의 기능을 활용하며 작동하지 않지만 작동하는 코드를 사용하는 것이 포함될 수 있습니다. PHP의 깊이를 탐구하는 재미 있고 흥미로운 방법이며 종종 놀랍고 영감을주는 발견으로 이어집니다.
"Spooky Scary PHP"학습을 시작하는 방법은 무엇입니까?
"Spooky Scary PHP"를 배우는 가장 좋은 방법은 PHP의 기본 사항을 확실하게 이해하는 것입니다. 기본 사항에 만족하면 언어의 모호한 모서리를 탐색 할 수 있습니다. "Spooky Scary PHP"에 대한 기사, 튜토리얼 및 포럼 토론도 매우 도움이 될 수 있습니다. 목표는 효율적이거나 실용적인 코드를 작성하는 것이 아니라 언어를 더 깊이 탐구하고 이해하는 것입니다.
"Spooky Scary PHP"가 좋은 관행입니까?
"Spooky Scary PHP"는 일반적으로 생산 코드 작성에 대한 모범 사례로 간주되지 않습니다. 일반적으로 비효율적이거나 불분명하거나 예측할 수없는 기능 또는 기술을 사용하는 것이 포함됩니다. 그러나 언어에 대해 더 많이 배우고 PHP에 대한 이해에 도전하는 좋은 방법 일 수 있습니다. 실용적인 코딩 스타일보다 학습 도구 및 재미있는 실험과 비슷합니다.
"Spooky Scary PHP"가 해롭습니까?
"Spooky Scary PHP"는 재미 있고 교육적이지만 책임감있게 사용하십시오. "Spooky Scary PHP"에 사용되는 일부 기술은 언어의 기능이나 오류를 악용하는 것과 같은 실시간 환경에서 사용될 경우 해를 입힐 수 있습니다. 작성한 코드를 철저히 테스트하고 프로젝트의 중요한 부분에서 "Spooky Scary PHP"기술을 사용하지 마십시오.
위 내용은 으스스한 무서운 PHP의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!