亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

不気味な怖いPHP

Feb 25, 2025 am 09:25 AM

Spooky Scary PHP

カボチャのキャンディーとサイダーの準(zhǔn)備はできていますか?毎年恒例のハロウィーンが再びここにあります!世界中の狂信主義は米國ほど良くありませんが、私はまだこのフェスティバルを祝うために「恐ろしい」PHPのヒントを共有したいと思っています。この投稿は簡単で楽しく、PHP自體の驚くべき(しかし論理的な)行動のいくつかと、一部の人々がPHPを使用してタスクを完了するために不気味な(そしておそらく非常に非論理的な)行動を示します。あなたはそれを私のホリデーギフト、プログラマーの「スピリチュアルキャンディー」の少しと考えることができます。

キーポイントの概要

概要

  • PHPは、最初のforeachループの外側(cè)に參照を保持するなど、予期しない動作を示す可能性があり、予期しない出力結(jié)果が得られます。この問題は、配列のキーを使用して文字列を再割り當(dāng)てすることで軽減できます。
  • PHPを使用してより複雑なタスク(シェルスクリプトなど)を?qū)g行する場合、フォーク時に実行環(huán)境がどのようにクローン化されるか、およびすべてのプロセスでさまざまなリソースがどのように影響を受けるかを理解することが重要です。たとえば、データベースに接続する場合、フォークチャイルドプロセスの後に親プロセスに接続することが最善であり、必要に応じて子プロセスを単獨で接続します。
  • シングルトンパターン(実際には、派手なオブジェクト指向のグローバル変數(shù)にすぎません)は、デバッグを困難にする可能性があります??赡埭氏蓼辚伐螗哎毳去螗猢`ドを避けることをお勧めします。
  • 「不気味な怖いPHP」のような型破りなコーディングプラクティスは興味深く、教育コードを書くための良い慣行とは考えられていません。

hazed array

昔々、それほど遠(yuǎn)くない開発スタジオで、アーサーは夜遅くにコードを書いていました。彼は、彼が使用しようとしていたアレイが幽霊だったことを知りませんでした!キーボードをタップするたびに、彼は背骨から寒さが滑るのを感じましたが、彼はこの微妙な予感を愚かに無視しました。

<?php
$spell = array("double", "toil", "trouble", "cauldron", "bubble");
foreach ($spell as &$word) {
    $word = ucfirst($word);
}
foreach ($spell as $word) {
    echo $word . "n";
}

わかりました、この配列は実際には幽霊ではありませんが、出力は確かに予想外です:

<code>Double
Toil
Trouble
Cauldron
Cauldron</code>
この「恐ろしい」動作の理由は、PHPが最初の

ループの外側(cè)に參照を保持する方法です。 2番目のループが開始されると、foreachはまだ參照であり、配列の最後の要素を指します。 2番目のループの最初のイテレーションは、「double」を$wordに割り當(dāng)て、最後の要素を上書きします。 2番目の反復(fù)では、「苦労」を$wordに割り當(dāng)て、最後の要素を再び上書きします。ループが最後の要素の値を読み取ると、數(shù)回上書きされます。この動作についての洞察を得るために、トピックに関するヨハネス?シュルターのブログ投稿「參照とforeach」を読むことをお勧めします。このわずかに変更されたバージョンを?qū)g行して、その出力をチェックして、PHPが何をしているのかをよりよく理解することもできます。

<?php
$spell = array("double", "toil", "trouble", "cauldron", "bubble");
foreach ($spell as &$word) {
    $word = ucfirst($word);
}
foreach ($spell as $word) {
    echo $word . "n";
}

アーサーはその夜に非常に重要な教訓(xùn)を?qū)Wび、文字列を再割り當(dāng)てするために配列のキーでコードを修正しました:

<code>Double
Toil
Trouble
Cauldron
Cauldron</code>

ゴーストデータベース接続

PHPは、毎日Webページを生成するだけでなく、ますます求められています。 PHPで記述されたシェルスクリプトの數(shù)は増加しており、開発者が開発言語を統(tǒng)合することの利點を見ているため、これらのスクリプトによって実行されるタスクはますます複雑になっています。通常、これらのスクリプトのパフォーマンスは受け入れられ、利便性のために行われたトレードオフが証明されています。スーザンは、コードが次のような並列処理タスクを書いています。

彼女のコードは、子のプロセスを並行していくつかの長期にわたる作業(yè)を?qū)g行するために子どものプロセスを分岐しますが、親プロセスは子どものプロセスを監(jiān)視し続け、すべての子供が終了したときに結(jié)果を報告します。
<?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";
}

しかし、スーザンのリーダーシップは、標(biāo)準(zhǔn)の出力に出力するのではなく、ログにステータス情報をログに記録するように依頼しました。スーザンは、既に會社のコードベースに含まれていたSingleton Pattern PDOデータベース接続メカニズムを使用してコードを拡張しました。
<?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";
テーブルの行が更新されていることを期待しています。プロセス。殘念ながら、実行は例外をスローし、データベースは彼女の期待を反映していません。

timings

<code>Fork child 1634.
Fork child 1635.
Fork child 1636.
Child 1634 working...
Fork child 1637.
Child 1635 working...
Child 1636 working...
Fork child 1638.
Child 1637 working...
Child 1638 working...
Child 1637 finished.
Child 1636 finished.
Child 1638 finished.
Child 1635 finished.
Child 1634 finished.
Tasks complete.</code>
アーサーの配列のように、スーザンのデータベースは幽霊ですか?さて、次の手がかりを與えたら、この謎をつなぎ合わせることができるかどうかを確認(rèn)してください。1。プロセスが分岐した場合、親プロセスは子プロセスとしてコピーされます。これらの複製されたプロセスは、それから並行して実行されます。 2。靜的メンバーは、クラスのすべてのインスタンスの中で共有されます。
#! /usr/bin/env php
<?php
$db = Db::connection();
$db->query("UPDATE timings SET tstamp=NOW() WHERE name='start time'");

$pids = array();
foreach (range(0, 4) as $i) {
    ...
}
while (count($pids)) {
    ...
}

$db->query("UPDATE timings SET tstamp=NOW() WHERE name='stop time'");

class Db
{
    protected static $db;

    public static function connection() {
        if (!isset(self::$db)) {
            self::$db = new PDO("mysql:host=localhost;dbname=test",
                "dbuser", "dbpass");
            self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }
        return self::$db;
    }
}

PDO接続はシングルトンとして包まれているため、アプリケーション內(nèi)のそれを參照することはメモリ內(nèi)の同じリソースを指します。

最初にオブジェクトリファレンスを返し、親プロセスフォーク、子プロセスが処理され続け、親プロセスが待機し、子プロセスが終了し、PHPが使用されるリソースをクリーンアップし、その後、親プロセスはデータベースオブジェクトを使用しようとしますまた。 MySQLへの接続は子プロセスで閉鎖されているため、最終的な呼び出しは失敗します。最終的なロギングクエリの前に再び接続を再度取得しようとすることは、スーザンに役立ちません。これは、同じ失敗したPDOインスタンスがシングルトンであるため返されるためです。シングルトンを避けることをお勧めします - それらは本當(dāng)に派手なオブジェクト指向のグローバル変數(shù)であり、それがデバッグを困難にします。私たちの場合でも、接続は子供のプロセスによって閉じられますが、2番目のクエリの前に

が呼び出された場合、少なくともシングルトンなしで新しい接続を返します。しかし、より良い方法は、フォーク時に実行環(huán)境がどのようにクローン化され、すべてのプロセスでさまざまなリソースがどのように影響を受けるかを理解することです。この場合、フォークチャイルドプロセスの後に親プロセスのデータベースに接続することが最善であり、必要に応じてチャイルドプロセスはそれ自體で接続します。接続を共有しないでください。 DB::connection() DB::connection()

<code>PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 2006 MySQL server has gone away' in /home/susanbrown/test.php:21
Stack trace:
#0 /home/susanbrown/test.php(21): PDO->query('UPDATE timers S...')
#1 {main}</code>
dr

メアリー?シェリーの「フランケンシュタイン」は、科學(xué)者が人生を創(chuàng)造する物語を語っていますが、彼はそのugさにうんざりし、それを放棄します。不必要な死と破壊の後、フランケンシュタイン博士は世界の終わりまで彼の創(chuàng)造を追求し、それを破壊しようとします。私たちの多くは、そのような醜いコードライフを與えてきたので、後で逃げることを望みました。コードはとてもugい、とても退屈で、混oticとしているので、嘔吐したくなりますが、愛と理解を望んでいます。數(shù)年前、私はデータベースインターフェイスと、「Everything Is a File」というUnixの哲學(xué)に従っている場合、データベースインターフェイスとそれらがどのように見えるかについてのアイデアを回っています。クエリは「ファイル」に書き込まれます。 「ファイル」から読んでください。私自身の死と破壊的なコーディングのいくつかの後、私は私の最初の考えとはほとんど関係がない次のクラスを書きました:

<?php
$spell = array("double", "toil", "trouble", "cauldron", "bubble");
foreach ($spell as &$word) {
    $word = ucfirst($word);
}
foreach ($spell as $word) {
    echo $word . "n";
}

結(jié)果は天才ですが、嫌なことです。オブジェクト(実際のAPIメソッドなし)、配列、または文字列のように見えるインスタンス...

<code>Double
Toil
Trouble
Cauldron
Cauldron</code>

私はその後まもなくブログを書き、それを悪としてマークしました。ほぼすべてを見た友人や同僚は、「素晴らしい!今それを殺す...火をつけて燃やしました。それが実際に違反する唯一のルールは、query()result()などの當(dāng)たり障りのない命名方法に対するプログラマーの期待です。代わりに、クエリ文字列自體をクエリメソッドとして使用し、オブジェクトはインターフェイスであり、結(jié)果セットが結(jié)果です。もちろん、SQLクエリのように見えるが、select()を持っているように見えるwhere()->のメソッドをリンクする過剰な一般化されたORMインターフェイスよりも悪くはありません。たぶん私のクラスはそんなに悪ではありませんか?多分それはただ愛されたいのですか?もちろん、私は北極圏で死にたくありません!

結(jié)論

この投稿を楽しんだことを願っています。これらの例は(あまりにも多く)悪夢をもたらさないことを願っています!また、あなたが幽霊やひどいコードについてのあなた自身の物語を持っていると思います。あなたがどこにいても、あなたは休日の楽しみをなくす必要はありませんので、以下のコメントであなたのひどいPHPのストーリーを自由に共有してください! Fotoliaの寫真

(以下はFAQであり、元のコンテンツに従って調(diào)整および合理化されています)「不気味な怖いPHP」 についてのよくある質(zhì)問

「不気味な怖いPHP」とは何ですか?

「Spooky Scary PHP」は、特定の結(jié)果を達(dá)成するために型破りまたは予期しない方法を使用することを伴う一意のPHPエンコーディング方法です。これには、あまり知られていない関數(shù)の使用、言語の機能を活用すること、さらには機能していないが機能するコードを使用することも含まれます。それはPHPの深さを探求する楽しくてエキサイティングな方法であり、多くの場合、驚くほど刺激的な発見につながります。

「不気味な怖いPHP」を?qū)Wび始める方法は?

「不気味な怖いPHP」を?qū)Wぶ最良の方法は、PHPの基本をしっかりと理解することです?;兢藴鹤悚筏郡?、言語のより曖昧な角を探索し始めることができます。 「不気味な怖いPHP」に関する記事、チュートリアル、フォーラムの議論も非常に役立ちます。目標(biāo)は、効率的または実用的なコードを書くことではなく、より深い方法で言語を探求して理解することです。

「不気味な怖いPHP」は良い練習(xí)ですか?

「不気味な怖いPHP」は、通常、生産コードを書くための良い慣行とは見なされません。通常、非効率的、不明確な、または予測不可能な機能または技術(shù)の使用が含まれます。ただし、言語についてさらに學(xué)び、PHPの理解に挑戦するのに最適な方法かもしれません。実用的なコーディングスタイルというよりは、學(xué)習(xí)ツールと楽しい実験のようなものです。

「不気味な怖いPHP」は有害ですか?

「不気味な怖いPHP」は楽しく教育的ですが、責(zé)任を持って使用してください。 「不気味な怖いPHP」で使用されるいくつかのテクノロジーは、言語の機能やエラーを活用するリアルタイム環(huán)境で使用する場合、害を引き起こす可能性があります。記述したコードを徹底的にテストし、プロジェクトの重要な部分で「不気味な怖いPHP」テクノロジーを使用しないでください。

以上が不気味な怖いPHPの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

パスワード強度のPHP Regex パスワード強度のPHP Regex Jul 03, 2025 am 10:33 AM

パスワードの強度を判斷するには、定期的な処理と論理処理を組み合わせる必要があります?;镜膜室摔弦韵陇蓼欷蓼?。1。長さは8桁以上です。 2。少なくとも小文字、大文字、および數(shù)字を含む。 3。特別な文字制限を追加できます。高度な側(cè)面に関しては、文字の継続的な重複と漸進(jìn)的/減少シーケンスを避ける必要があります。これには、PHP機能検出が必要です。同時に、ブラックリストを?qū)毪筏?、パスワードや123456などの一般的な弱いパスワードをフィルタリングする必要があります。最後に、評価の精度を向上させるためにZXCVBNライブラリを組み合わせることをお勧めします。

PHP変數(shù)スコープは説明されています PHP変數(shù)スコープは説明されています Jul 17, 2025 am 04:16 AM

PHP変數(shù)スコープの一般的な問題とソリューションには次のものが含まれます。1。グローバル変數(shù)は関數(shù)內(nèi)でアクセスできず、グローバルキーワードまたはパラメーターを使用して渡す必要があります。 2。靜的変數(shù)は靜的で宣言され、1回のみ初期化され、値は複數(shù)の呼び出し間で維持されます。 3. $ _GETや$ _POSTなどのハイパーグローバル変數(shù)は、任意の範(fàn)囲で直接使用できますが、安全なフィルタリングに注意を払う必要があります。 4.匿名関數(shù)は、使用キーワードを使用して親スコープ変數(shù)を?qū)毪工氡匾ⅳ辍⑼獠繅鋽?shù)を変更する場合は、參照を渡す必要があります。これらのルールを習(xí)得すると、エラーを回避し、コードの安定性が向上するのに役立ちます。

ファイルアップロードをPHPで安全に処理する方法は? ファイルアップロードをPHPで安全に処理する方法は? Jul 08, 2025 am 02:37 AM

PHPファイルのアップロードを安全に処理するには、ソースとタイプを確認(rèn)し、ファイル名とパスを制御し、サーバー制限を設(shè)定し、メディアファイルを2回プロセスする必要があります。 1.トークンを介してCSRFを防ぐためにアップロードソースを確認(rèn)し、ホワイトリストコントロールを使用してFINFO_FILEを介して実際のMIMEタイプを検出します。 2。ファイルをランダムな文字列に変更し、検出タイプに従って非WEBディレクトリに保存する拡張機能を決定します。 3。PHP構(gòu)成は、アップロードサイズを制限し、一時的なディレクトリnginx/apacheはアップロードディレクトリへのアクセスを禁止します。 4. GDライブラリは寫真を再利用して、潛在的な悪意のあるデータをクリアします。

PHPでコードをコメントします PHPでコードをコメントします Jul 18, 2025 am 04:57 AM

PHPコメントコードには3つの一般的な方法があります。1。//#を使用して1行のコードをブロックすると、//を使用することをお勧めします。 2。使用/.../複數(shù)の行でコードブロックをラップするには、ネストすることはできませんが交差することができます。 3. / if(){}を使用するなどの組み合わせスキルコメントロジックブロックを制御するか、エディターショートカットキーで効率を改善するには、シンボルを閉じることに注意を払い、使用時にネストを避ける必要があります。

発電機はPHPでどのように機能しますか? 発電機はPHPでどのように機能しますか? Jul 11, 2025 am 03:12 AM

ageneratorinphpisamemory-efficientwaytoateate-overdeatatasetasetasetasetsinging valueseintimeintimeturningthemallatonce.1.generatorsususedeywordproducevaluesedemand、memoryusage.2を還元すること。2

PHPコメントを書くためのヒント PHPコメントを書くためのヒント Jul 18, 2025 am 04:51 AM

PHPコメントを書くための鍵は、目的と仕様を明確にすることです。コメントは、「何が行われたのか」ではなく「なぜ」を説明する必要があり、冗長性や単純さを避けてください。 1.読みやすさとツールの互換性を向上させるために、クラスおよびメソッドの説明にdocblock(/*/)などの統(tǒng)合形式を使用します。 2。JSジャンプを手動で出力する必要がある理由など、ロジックの背後にある理由を強調(diào)します。 3.複雑なコードの前に概要説明を追加し、手順でプロセスを説明し、全體的なアイデアを理解するのに役立ちます。 4. TodoとFixmeを合理的に使用して、To Doアイテムと問題をマークして、その後の追跡とコラボレーションを促進(jìn)します。優(yōu)れた注釈は、通信コストを削減し、コードメンテナンスの効率を向上させることができます。

クイックPHPインストールチュートリアル クイックPHPインストールチュートリアル Jul 18, 2025 am 04:52 AM

to installphpquickly、usexampponwindowsorhomebrewonmacos.1.onwindows、downloadandinstallxampp、selectcomponents、startapache、andplacefilesinhtdocs.2

PHPの學(xué)習(xí):初心者向けガイド PHPの學(xué)習(xí):初心者向けガイド Jul 18, 2025 am 04:54 AM

tolearnphpefctivially、startbysettingupalocalserverenvironmentusingtoolslikexamppandacodeeditorlikevscode.1)instalxamppforapa Che、mysql、andphp.2)useocodeeditorforsyntaxsupport.3)testyoursetup withasimplephpfile.next、Learnpbasicsincludingvariables、ech

See all articles