国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

不気味な怖い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)境がどのようにクローン化されるか、およびすべてのプロセスでさまざまなリソースがどのように影響を受けるかを理解することが重要です。たとえば、データベースに接続する場合、フォークチャイルドプロセスの後に親プロセスに接続することが最善であり、必要に応じて子プロセスを単獨(dú)で接続します。
  • シングルトンパターン(実際には、派手なオブジェクト指向のグローバル変數(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)合することの利點(diǎn)を見ているため、これらのスクリプトによって実行されるタスクはますます複雑になっています。通常、これらのスクリプトのパフォーマンスは受け入れられ、利便性のために行われたトレードオフが証明されています。スーザンは、コードが次のような並列処理タスクを書いています。

彼女のコードは、子のプロセスを並行していくつかの長期にわたる作業(yè)を?qū)g行するために子どものプロセスを分岐しますが、親プロセスは子どものプロセスを監(jiān)視し続け、すべての子供が終了したときに結(jié)果を報(bào)告します。
<?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)の出力に出力するのではなく、ログにステータス情報(bào)をログに記録するように依頼しました。スーザンは、既に會社のコードベースに含まれていた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)の同じリソースを指します。

最初にオブジェクトリファレンスを返し、親プロセスフォーク、子プロセスが処理され続け、親プロセスが待機(jī)し、子プロセスが終了し、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ù)の使用、言語の機(jī)能を活用すること、さらには機(jī)能していないが機(jī)能するコードを使用することも含まれます。それはPHPの深さを探求する楽しくてエキサイティングな方法であり、多くの場合、驚くほど刺激的な発見につながります。

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

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

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

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

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

「不気味な怖いPHP」は楽しく教育的ですが、責(zé)任を持って使用してください。 「不気味な怖いPHP」で使用されるいくつかのテクノロジーは、言語の機(jī)能やエラーを活用するリアルタイム環(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

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

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHPに認(rèn)証と承認(rèn)を?qū)g裝するにはどうすればよいですか? PHPに認(rèn)証と承認(rèn)を?qū)g裝するにはどうすればよいですか? Jun 20, 2025 am 01:03 AM

tosecurelyhandLeauthenticationAndauthorizationInizationInization、followTheSteps:1.LwayShashPasswordswithPassword_hash()andverifyusingpassword_verify()、usepreparedStatementStatementStatementStatementStatementStain、andstoreUserdatain $ _SessionAfterlogin.2.implementRementRementRementRementRementRementRementRole

PHPでファイルアップロードを安全に処理するにはどうすればよいですか? PHPでファイルアップロードを安全に処理するにはどうすればよいですか? Jun 19, 2025 am 01:05 AM

PHPでファイルアップロードを安全に処理するために、コアはファイルタイプを確認(rèn)し、ファイルの名前を変更し、権限を制限することです。 1。Finfo_File()を使用して実際のMIMEタイプを確認(rèn)し、Image/JPEGなどの特定のタイプのみが許可されます。 2。uniqid()を使用してランダムファイル名を生成し、非webルートディレクトリに保存します。 3. PHP.iniおよびHTMLフォームを介してファイルサイズを制限し、ディレクトリ権限を0755に設(shè)定します。 4. Clamavを使用してマルウェアをスキャンしてセキュリティを強(qiáng)化します。これらの手順は、セキュリティの脆弱性を効果的に防止し、ファイルのアップロードプロセスが安全で信頼性が高いことを確認(rèn)します。

PHPの==(ゆるい比較)と===(厳密な比較)の違いは何ですか? PHPの==(ゆるい比較)と===(厳密な比較)の違いは何ですか? Jun 19, 2025 am 01:07 AM

PHPでは、==と==の主な違いは、タイプチェックの厳格さです。 ==タイプ変換は比較の前に実行されます。たとえば、5 == "5"はtrueを返します。===リクエストは、trueが返される前に値とタイプが同じであることを要求します。たとえば、5 === "5"はfalseを返します。使用シナリオでは、===はより安全で、最初に使用する必要があります。==は、タイプ変換が必要な場合にのみ使用されます。

PHP(、 - 、 *、 /、%)で算術(shù)操作を?qū)g行するにはどうすればよいですか? PHP(、 - 、 *、 /、%)で算術(shù)操作を?qū)g行するにはどうすればよいですか? Jun 19, 2025 pm 05:13 PM

PHPで基本的な數(shù)學(xué)操作を使用する方法は次のとおりです。1。追加標(biāo)識は、整數(shù)と浮動小數(shù)點(diǎn)數(shù)をサポートし、変數(shù)にも使用できます。文字列番號は自動的に変換されますが、依存関係には推奨されません。 2。減算標(biāo)識の使用 - 標(biāo)識、変數(shù)は同じであり、タイプ変換も適用されます。 3.乗算サインは、數(shù)字や類似の文字列に適した標(biāo)識を使用します。 4.分割はゼロで割らないようにする必要がある分割 /標(biāo)識を使用し、結(jié)果は浮動小數(shù)點(diǎn)數(shù)である可能性があることに注意してください。 5.モジュラス標(biāo)識を採取することは、奇妙な數(shù)と偶數(shù)を判斷するために使用でき、負(fù)の數(shù)を処理する場合、殘りの兆候は配當(dāng)と一致しています。これらの演算子を正しく使用するための鍵は、データ型が明確であり、境界の狀況がうまく処理されるようにすることです。

PHPのNOSQLデータベース(Mongodb、Redisなど)とどのように対話できますか? PHPのNOSQLデータベース(Mongodb、Redisなど)とどのように対話できますか? Jun 19, 2025 am 01:07 AM

はい、PHPは、特定の拡張機(jī)能またはライブラリを使用して、MongoDBやRedisなどのNOSQLデータベースと対話できます。まず、MongoDBPHPドライバー(PECLまたはComposerを介してインストール)を使用して、クライアントインスタンスを作成し、データベースとコレクションを操作し、挿入、クエリ、集約、その他の操作をサポートします。第二に、PredisライブラリまたはPhpredis拡張機(jī)能を使用してRedisに接続し、キー価値設(shè)定と取得を?qū)g行し、高性能シナリオにPhpredisを推奨しますが、Predisは迅速な展開に便利です。どちらも生産環(huán)境に適しており、十分に文書化されています。

最新のPHP開発とベストプラクティスを最新の狀態(tài)に保つにはどうすればよいですか? 最新のPHP開発とベストプラクティスを最新の狀態(tài)に保つにはどうすればよいですか? Jun 23, 2025 am 12:56 AM

postaycurrentwithpdevellyments andbest practices、follow keynewsourceslikephp.netandphpweekly、egagewithcommunitiessonforums andconferences、keeptooling and gradivallyadoptnewfeatures、andreadorcontributeTopensourceprijeprijeprijeptrijeprijeprests.

PHPとは何ですか、そしてなぜそれがWeb開発に使用されるのですか? PHPとは何ですか、そしてなぜそれがWeb開発に使用されるのですか? Jun 23, 2025 am 12:55 AM

PhpBecamepopularforwebdevelopmentduetoitseaseaseaseaseasease、SeamlessintegrationWithhtml、widespreadhostingsupport、andalargeecosystemincludingframeworkelavelandcmsplatformslikewordspresspressinsinsionsisionsisionsisionsisionsionsionsisionsionsionsisionsisions

PHPタイムゾーンを設(shè)定する方法は? PHPタイムゾーンを設(shè)定する方法は? Jun 25, 2025 am 01:00 AM

tosettherighttimezoneInphp、usedate_default_timezone_set()functionthestthestofyourscriptwithavalididentifiersiersuchas'america/new_york'.1.usedate_default_timezone_set()beforeanydate/timefunctions.2.2.Altertentally、confuturethephp.inifilebyset.

See all articles