質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.63%

【 PHP・WordPress 】アロー演算子の右側にあるのは何ですか?

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,581

ud_fibonacci

score 23

前提・実現したいこと

WordPressテーマ作成について学習中です。
PHPは初心者です。C#は実務経験があります。

下記のソースコードはfunctions.phpに書かれたのサンプル関数で、
固定ページが子ページかどうかを判断するものです。

if文の条件内に
『$post->post_parent』という記述がありますが、
演算子の右は何でしょうか?(左は変数ですよね。)

該当のソースコード

function X_is_subpage() {
global $post;
if ( is_page() && $post->post_parent ) {
return $post->post_parent;
} else {
return false;
};
}

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+4

クラスの「プロパティ」です。
http://php.net/manual/ja/language.oop5.properties.php

クラスメソッドから静的でないプロパティにアクセスするには -> (オブジェクト演算子) を使って $this->property のようにします (property のところにプロパティ名を指定します)

ご提示のコードの$postは おそらく WP_Postクラスのインスタンスで、
if ( is_page() && $post->post_parent )部分で
「ページオブジェクトで、かつ"親投稿"を持っているか?」
を判定していると思われます。
https://wpdocs.osdn.jp/%E3%82%AF%E3%83%A9%E3%82%B9%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/WP_Post

post_parent    整数        親投稿の ID (デフォルトは0)

PHP の場合、if 文などの条件式に数値の 0 を指定すると、false とみなされます。
http://php.net/manual/ja/language.types.boolean.php

boolean に変換する場合、次の値は FALSE とみなされます。
(中略)
○ integer の 0 (ゼロ)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/12/11 20:56

    ありがとうございます!プロパティについて、理解が深まり、
    おかげ様で最初に聞きたかった疑問は解決できました。

    $postはWP_Postのインスタンスなのですね。

    ただ、やっぱり分からないのは
    $postの型がどこでWP_Postと決まったのかです。

    スコープがglobalなので、
    下記の『globalキーワード』の部分と、
    http://php.net/manual/ja/language.variables.scope.php
    ご紹介頂いたCordexを参考に考えると、
    functions.phpのどこかで

    $post = get_post();

    という記述があるのかな…と考えたのですが
    そうではありませんでした。

    手元にあるPHPの入門書から察するに、
    PHPは値を代入したときに型が決まるのかなと
    思っているのですが、
    そうではないのでしょうか。。。

    キャンセル

  • 2016/12/12 00:50

    返信ありがとうございます。

    > $postの型がどこでWP_Postと決まったのか

    について、
    Wordpress がフレームワークの内部でグローバル変数 $post に
    「現在、表示している投稿」
    のデータをセットしているようです。

    https://codex.wordpress.org/Function_Reference/$post
    > Contains data from the current post in The Loop.

    参照された PHP のマニュアルではちょっとわかりにくいですが、グローバルスコープの変数は、スクリプト内のどこからでもアクセスできます。
    つまり、別のソースファイルで生成されたグローバル変数にも、functions.php内から参照可能、ということです。

    また、

    > PHPは値を代入したときに型が決まるのかなと
    > 思っているのですが、

    について付言すると、
    PHPの変数にはどのような型の値も格納することができます。
    つまり、一度 数値型の値を代入した変数に、文字列型の値を再代入することも可能、ということです。

    http://php.net/manual/ja/language.types.intro.php
    > 変数の型は、基本的にプログラマが設定するものではありません。 その変数が使用される文脈に応じ、PHP が実行時に決定します。

    個人的には、これがPHPの長所でもあり、短所でもあると感じていますw

    キャンセル

  • 2016/12/12 08:44

    ありがとうございます!!!

    $postについても、型についても良く分かりました!

    学習の"とっかかり"を作って頂けたので
    今後は理解を深めていきたいと思います。

    ありがとうございました!

    キャンセル

  • 2016/12/12 12:59

    b

    キャンセル

+3

アロー演算子です。
左の「$post」は何らかのインスタンスで内部にプロパティを持っています。
インスタンス内のプロパティにアクセスする時に使うのがアロー演算子「->」となります。
スタティックなアクセスの場合は「::」(コロン2個)を使います。
C#で言うところの「hoeHoge.fuga」のような形と一緒です。(うろ覚え・・・)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/12/11 19:15

    早速ご回答頂きありがとうございます。
    プロパティにアクセス…良く分かりました!
    ありがとうございます。

    ご回答を拝読してさらに疑問に思ったのですが、

    $postは何らかのインスタンスとのことですが、
    型(クラス)があるのでしょうか?
    ある場合、どこかで定義されているのでしょうか?

    C#の場合は int や object など型を宣言して変数を作成し、
    クラスを宣言してインスタンスを作成すると思うのですが、
    PHPの変数やインスタンスはそのようなイメージとは異なるのでしょうか?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.63%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる