PHP における 2 つのコロンは何を意味しますか? コロン: どこに、いつ、なぜコロンを入れる必要があるか。 書き方。
PHP で書かれたプログラムのコードを分析したことがあるなら、おそらくコード内でそのような特殊なものに遭遇したことがあるでしょう。 文字:
-> (ダッシュと大なり記号)
:: (ダブルコロン)
たとえば、これらの式を使用した構造は次のようになります。
Hello::hello_world(); q -> hello_world();
これらの構造がなぜ必要なのかを理解するために、最も単純な例を見てみましょう。 単純な「Hello world!」プログラムがあるとします。
単純な php ファイルを作成し、その中に次のコードを記述してみましょう。
クラス Hello ( function hello_world () ( echo "Hello world"; ) )
次に、hello_world() 関数を実行する方法を考えてみましょう。
hello_world() 関数が Hello クラスにない場合は、非常に簡単に呼び出すことになります。
こんにちは世界();
その結果、画面に「Hello world」という文字が表示されます。 しかし、おそらく、この方法で問題を解決しようとすると、画面にエラーが表示されるでしょう。
致命的なエラー: …/test.php の未定義関数 hello_world() を行…で呼び出します。
すべてが正しいので、 関数がクラス内にある場合は、その関数を Hello クラスで探す必要があることをコンピューターに伝える必要があります。 そうしないと何もうまくいきません。
このような情報はどのようにしてコンピュータに伝達できるのでしょうか?
ここにはいくつかのオプションがあります。 それぞれを個別に見てみましょう。
オプション1。 クラスのインスタンスを作成することによって。
$q = 新しいこんにちは;
この行で、Hello クラスのいわゆるインスタンスを作成します。 この操作の後、このインスタンスを通じて必要な関数に自由にアクセスできます。この場合、関数は $q 変数に格納されています。
$q -> hello_world();
「->」構造は、クラス インスタンスと関数の間のリンクになります。
これですべてが機能します。 万歳! 画面に「Hello World」が表示されるはずです。
オプション 2。 二重コロン構造の使用::
このオプションはさらに簡単です。 ここでインスタンスを作成する必要さえありません。 私たちはただ書いているだけです。
Hello::hello_world();
関数が正常に実行されるかどうかを確認できます。
このノートを読んで、作成したクラス内の目的の関数にアクセスするために「->」と「::」が使用されることが理解できたと思います。
同じ構造を使用して、クラス内にある変数にアクセスできます。 唯一の違いは、最後に括弧を付ける必要がないことです。 例えば:
こんにちは世界;
この構造では、Hello クラスにある world 変数にアクセスします。
このような構造は、さまざまな Web サイト管理システムのコードを分析するときに特に頻繁に見つかります。 Joomla、WordPress などのシステムのソース コードを見てください。 これで、これが何のためにあるのかわかりました。
初心者向けの PHP チュートリアルの詳細。
つまり、コロンは句読点です。 ピリオド、感嘆符、疑問符、省略記号とは異なり、分離機能はありません。つまり、テキスト内の文を互いに分離しません。 コロンは文内にのみ配置され、文がその後に続くことを示します。
コロンは単純な文でも複雑な文でも使用できます。 単純な文では、ステートメントの各部分を分割して強調表示しますが、複雑な文では、意味論的な役割も果たします。つまり、結合していない複雑な文の各部分間の意味論的な関係を示します。
では、コロンを間違いや他のコロンと混同せずに正しく使用するにはどうすればよいでしょうか? 主なケースを見てみましょう。
簡単な文のコロン
ルール 1. 同種のメンバーを含む文内のコロン
一般化する単語が同種メンバーの前にある場合は、その後にコロンが必要です。次に例を示します。 雪が積もっていた どこにでも:家の屋根、柵、芝生、車の上。
この文の中の単語は、 どこにでも 多くの同様の状況を一般化します。 一般化する単語は同種メンバーの前に配置されるため、その後にコロンが付きます。
ルール 2. 修飾語を含む文内のコロン
文の中で一般化した単語が使用されている場合は、明確化した単語を使用できます。 たとえば、そのように、つまり、 前にカンマ、その後にコロンが続きます。 例えば: 雪が積もっていた どこにでも, つまり: 家の屋根、柵、芝生、車の上。
この文では、一般化する単語と一緒に、 どこにでも それが使用されたことを明らかにする構造 「つまり」 , その後に同種の用語が続くため、コロンが続きます。
ルール 3. 直接話法の構文におけるコロン
著者の言葉の後に直接話法が続く場合は、その前にコロンが置かれ、直接話法自体は引用符で囲まれ、直接話法の最初の単語は大文字で書かれます。 先生は「こんにちは、子どもたち!」と言いました。また、直接話法によってテキスト内の著者の言葉が中断される場合は、その前にコロンが置かれます。次に例を示します。 「こんにちは、子どもたち!」と言いながら、先生は教室に入ってきました。直接話法の後にはカンマを入れる必要があります。
複雑な文のコロン
規則 4. 以下の場合、非和集合文 (BSP) の各部分の間にコロンを置くことができます。
- BSP の第 2 部 説明する最初の部分で何を言ったか(文の部分の間に「」を挿入できます) つまり「」)、 例えば: 人々の間にはそのような兆候があります。雨が降るとツバメは低く飛びます。 カティアは非常に有能に文章を書きます。言葉を決して間違えず、句読点を正しく配置します。これらの非和集合文では、2 番目の部分で、最初の部分で説明されている内容が説明されます。 文の間に「」を挿入できます。 つまり「」: 人々の間にそのような兆候があります (つまり):ツバメは雨に向かって水面を低く飛びます。したがって、上記の文にはコロンがあります。
- BSP の第 2 部 理由を明らかにする最初の部分で説明した内容 (文の各部分の間に接続詞を挿入できます: それ以来、だから)、 例えば: カティアは非常に有能に文章を書きます。彼女はよく読み、詩を暗記し、記憶力を鍛えます。 もうすぐ雨が降ります。ツバメが水の上を低く飛んでいます。これらの BSP では、2 番目の部分が正当化され、最初の部分で述べられたことの理由が示されます。 パーツ間に接続詞を挿入できます。 それ以来、だから。 もうすぐ雨が降ります (なぜなら):ツバメは水の上を低く飛びます。そのような文でコロンが使用されるのはそのためです。
- BSP の第 2 部 補完する、明らかにする最初の文で何を言ったか (このような文は説明文を含む複文と同義であるため、BSP の部分の間に接続詞を挿入できます) 何)。 例えば: カティアは知っています。本を読むことは面白いだけでなく、勉強にもとても役立ちます。 雨が降るとツバメは水面を低く飛ぶと言われます。 2 番目の部分の BSP データは、最初の部分で説明した内容の意味を明らかにします。 このような文の各部分が接続詞で接続されている場合 何とすると、説明文を含む複雑な文が得られます。 人々は言います (何、):ツバメは雨に向かって水面を低く飛びます。このタイプの文の前にはコロンが付きます。
- 文の最初の部分では動詞が省略されています。 そして見て、聞いて、感じた、 例えば: 私は頭を上げました。太陽の光が雲から差し込み、明るい光で空き地を照らしていました。 彼は振り向いた。急いで歩く足音が非常に近くで聞こえた。これらの文は、説明節を伴う複雑な従属節と同義でもあり、最初の部分では次のような動詞が続きます。 そして私は見ました、そして私は聞きました、パーツ間に接続詞を挿入できます 何。 私は頭を上げました (そしてそれを見た): 太陽の光が雲を突き抜けて、明るい光で空き地を照らしました。
コロンとダッシュ
コロンを使用する際の主な難点は、この句読点を別の句読点であるダッシュと混同しやすいことです。 最近では、これらの記号は並行して使用されることが多く、同じ場合にダッシュとコロンの両方を配置することができます。 例えば: そして審査員は「雨が降ったら競技は中止する」と決定した。 最初の石に気づいて、ここにお宝があると思って、探し始めた(テンドリャコフ)、 もちろん彼はかわった(: –) 猫背、灰色、しわがある口の隅に。 入ってきます(: – ) すべてが静かです。 彼の前でそんな言葉を言わないでください。(: – ) 気分を害するかもしれない。 誰もがたった 1 つの質問に興味を持っていました(: – ) この状況からできるだけ早く抜け出す方法。 それは一つのことを意味していた(: – ) 別れる必要がある。
このようなオプションは同等とみなされ、間違いを恐れることなくダッシュとコロンの両方を使用できます。 ただし、ダッシュは構文上の機能に加えて、感情的および表現的な機能も実行すること、つまり、ステートメントの感情性を示し、その表現力を強調することを覚えておく必要があります。 したがって、文がそのような意味を持たず、中立的な場合は、これまでに説明したルールに従って、ダッシュの使用を避け、コロンを置く必要があります。
おそらく、私がレッスンでこれら 2 つの疑似要素を頻繁に使用していることに気づいたでしょう。 なぜ私は彼らが好きなのでしょうか? これらは非常に使いやすいため、追加の HTML 要素を追加する必要さえありません。 ただし、この記事は疑似要素の利点について説明するものではありません。
この記事は、擬似要素の構文に関する混乱をすべて明確にすることを目的としています。
疑似何?
疑似要素は、実際の HTML 要素ではないため、そのように呼ばれます。 たとえば、HTML には before タグと after タグがありませんが、CSS では :before 要素と :after 要素のスタイルを設定できます。
コロンは 1 つまたは 2 つでしょうか?
:before と ::before 、または :after と ::after の間に違いはありません。 二重コロン構文は CSS3 に固有です。
http://www.w3.org/TR/css3-selectors/#pseudo-elements には次の段落があります。
この記号 (::) は、疑似クラスと疑似要素を区別するために導入されています。 既存のスタイル シートとの互換性を保つために、CSS 1 および 2 の疑似要素は単一のコロン (具体的には :first-line、:first-letter、:before、:after) で指定することもできます。
要約しましょう
IE 7 以前では、リストされた疑似要素はサポートされていません。 しかし、IE 8 はこれをサポートしており、これがシングルコロン構文を使用する十分な (そして唯一の) 理由です。
重要!
1 つまたは 2 つのコロンに関するこの説明はすべて、疑似要素についてのみであり、疑似クラスについては話していないことに注意してください。
どうやって書くの?
どの構文を使用するか、およびその理由をコメントに記入してください。
PHP の「スコープ解決演算子」としての 2 つのコロンの使用に関する回答に加えて、次のようになります。
さらに、二重コロンが使用されます。
無修飾クラス名、修飾クラス名、または別名のクラス名を完全修飾形式に変換するには、
クラスメソッド __callStatic を呼び出します。
「::class」を追加してクラス名を完全修飾形式に変換するには
クラス名の後の 2 つのコロンとそれに続くキーワード「class」は、そのクラスの完全修飾名を文字列として提供します。 つまり、「ClassName::class」は完全名「ClassName」に変換されます。 (A) マニュアル: クラスとオブジェクト: 基本、(B) マニュアル: クラスとオブジェクト: クラス定数、および (C) マニュアル: 言語リファレンス: 定数を参照してください。
「::class」構文は、名前空間で、非修飾形式または修飾形式、あるいは名前の別名から完全修飾クラス名を取得する場合に便利です。
「::class」構文はクラス名だけでなくインターフェイス名も解決できるようですが、これについては上にリンクされたソースには記載されていないようです。
クラス内では、上にリンクされている「::class」RFC で説明されているように、この構文は「self::class」でも機能します。
いくつかの例:
fullName()、PHP_EOL; // 出力: MyNamespace\TheirClass
「__callStatic」を呼び出すには
2 つのコロンを使用して、クラスが宣言していない静的メソッド名を「呼び出す」ことができます。 これにより、クラス メソッド「__callStatic」が宣言されている場合、それが呼び出されます。 __callStatic メソッドは、通話の処理方法を「動的に」選択できます。 PHP では、これを「マジック メソッド」 __callStatic を使用した「オーバーロード」と呼びます。
handleOrder($arguments); ) " 申し訳ありませんが、お手伝いすることはできません " を返します。 lcfirst($item) 。 "。"; ) ) 名前空間 OurCompany\Specialists; class Car ( public function handleOrder($arguments) ( return "$arguments の車を手伝ってもいいですか?"; ) ) class Truck ( public function handleOrder($arguments) ( return "$arguments のトラックを手伝ってもいいですか? "; ) ) OurCompany\Orders\Intake を使用します。 echo Intake::orderCar("red")、PHP_EOL; // 出力: 赤い車を手伝ってもいいですか? echo Intake::orderTruck("ピックアップ")、PHP_EOL; // 出力: ピックアップ トラックを手伝ってもいいですか? echo Intake::orderShoes("スエード")、PHP_EOL; // 出力: 申し訳ありませんが、靴についてはお手伝いできません。