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

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

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

3037閲覧

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

ud_fibonacci

総合スコア25

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/12/11 09:51

###前提・実現したいこと
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;
};
}

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

クラスの「プロパティ」です。
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 10:34

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ud_fibonacci

2016/12/11 11: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は値を代入したときに型が決まるのかなと 思っているのですが、 そうではないのでしょうか。。。
KiyoshiMotoki

2016/12/11 15: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
ud_fibonacci

2016/12/11 23:44

ありがとうございます!!! $postについても、型についても良く分かりました! 学習の"とっかかり"を作って頂けたので 今後は理解を深めていきたいと思います。 ありがとうございました!
guest

0

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

投稿2016/12/11 10:00

tonarino210

総合スコア228

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ud_fibonacci

2016/12/11 10:15

早速ご回答頂きありがとうございます。 プロパティにアクセス…良く分かりました! ありがとうございます。 ご回答を拝読してさらに疑問に思ったのですが、 $postは何らかのインスタンスとのことですが、 型(クラス)があるのでしょうか? ある場合、どこかで定義されているのでしょうか? C#の場合は int や object など型を宣言して変数を作成し、 クラスを宣言してインスタンスを作成すると思うのですが、 PHPの変数やインスタンスはそのようなイメージとは異なるのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問