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

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

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

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

Q&A

解決済

1回答

2126閲覧

PHP7環境で「WordPress Importer」を使うとエラーになる件について

aw10

総合スコア17

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

2グッド

0クリップ

投稿2016/05/21 03:52

編集2016/05/22 07:26

「数件のstrict standards/noticeでのアップデートリリースはしない」方針のようで、代わりに(有志による?)修正バージョンを見つけました。
修正verの変更点について、自分なりに考えてみたのですが、わからない部分があり、質問させていただきます。

※参考URL
修正版→http://pastebin.com/14xJER5S
フォーラムトピック→https://wordpress.org/support/topic/php-deprecated-class-constructor-name-with-php7

<変更点>
・66行目…(1)
function WP_Import() { /* nothing / }

public function __construct(){ /
nothing */ }

・798行目…(2)
$$meta['key'] = $meta['value']

${$meta['key']} = $meta['value']

・1032行目…(3)
screen_icon(); // 削除

・1110行目…(4)
function bump_request_timeout(){

function bump_request_timeout($val){

●変更点についての、自分なりの解釈
(1).class同名のfunctionでのコンストラクタが非推奨になったことへの対応
(2).可変変数名の書き方を、より明示的な書き方に修正
(3).WP3.8~非推奨になったコマンド「screen_icon(get_screen_icon)」を削除
(4).「http_request_timeout」の形式が値設定ありなので、互換性のある書き方に修正

●疑問点
(A).この解釈で合っている?
(B).上記(1)のfunctionは、なぜ「public」なのか?

解釈の間違いや、追加情報、補足情報など。
なにかありましたら、コメントをいただけると嬉しいです。
よろしくお願いします。

<開発環境>
XAMPP:7.0.4(PHP7+MariaDB)
WordPress:4.5.2
WordPress Importer:0.6.1
OS:Windows Vista SP2

※Word Pressは5/21現時点での最新版。XAMPPは2つ前のバージョンです。

kei344, maisumakun👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

だいたいそのとおりですが、(2)はPHP5とPHP7で挙動が違う部分で、PHP7では${$meta}['key']と解釈されてしまうので中括弧が必要となります(互換性のない変更点)。

あと、コンストラクタはpublicでないと外部から呼べない、つまりこのクラスを外部からインスタンス化できないことになります(もちろん、それが有用な場面もあることはありますが)。

投稿2016/05/21 04:15

maisumakun

総合スコア145183

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

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

aw10

2016/05/22 07:37

(1)について あ、なるほど。 評価順が、PHP5とPHP7で変わったんですね。 それで、PHP5とPHP7で互換性のある書き方として、中カッコ{}で表現していると。 リンクまでつけていただいて、ありがとうございます。 (1)について コンストラクタについて、 ・classが呼び出されたとき、最初の1回だけ自動で実行される。 ・変数の初期設定などを行う。処理を書かない場合は、メモリ確保&値クリアー的な動作。 だと思っていました。 で、class「内部」で最初に実行&値設定の定義なしなら、publicじゃなくても良いのでは?と疑問に思ったんです。 でも、コンストラクタも関数(というか、メソッド?)の1つなんですね。 そして、「命令文を書かなくても自動で呼び出される」だけであって、実際は「関数をcallしている」。 なので、「インスタンスを生成する=外から呼ぶ」には、publicでないと扱えないよ、と。 あと、余談ですが、関数でスコープを書かない場合は「public」になるんですね。 簡単なコードで実験してみたら、こうなりました。 ↓ public function __construct() { /**/ } …OK private function __construct() { /**/ } …エラー function __construct() { /**/ } …OK 「指定なし=private」だと勘違いしたまま、コンストラクタの書き方が「function __construct」となっているものを見て、「public」である必要はあるのか?と思ってしまった次第。 PHPは入門書を一からみたいな勉強はできてなくて、ソースを見て何をしているか探っている状態です。 ちょっとおかしな質問になってしまっていたかも…。すみません。 文法的なことだけでなく、もっと骨組の方も知っておかないとダメですね。 今回お答えいただいたこと、大変勉強になりました。 どうもありがとうございました。 私がまだ勘違いしている部分、補足などありましたら、追加回答していただけると嬉しいです。 2~3日してなにもないようであれば、「解決済み」にしたいと思います。 お手数ですが、よろしくお願いします。
maisumakun

2016/05/22 09:15

PHP4時代にprivateやprotectedがなかった名残りで、PHP7でもメソッドは「何も書かなければpublic」となっています。これはJavaやC++とは違います。 あと、「コンストラクタの可視性でインスタンス化できるかを決める」というのも必然ではなく、たとえばRubyではnewがクラスメソッドで上書き可能なこともあって、コンストラクタ相当のinitializeは常にprivateです(Rubyのprivateはかなり意味が違いますが)。
aw10

2016/05/29 02:27

追加の回答、ありがとうございます。お礼が遅くなってしまってすみません。 おおお、なかなか奥が深いですね。そして、それがまた面白いとこかも。 PHPでコンストラクタを「わざと」privateにする活用シーンは、もっと修行を積んでから考えることにします(汗)。 わかりやすく丁寧に教えていただき、助かりました。 おかげ様で、とても勉強になりました。 どうもありがとうございました。 ※私の前回のコメント、「(1)について」が2つありますが、最初が(2)、次が(1)、でした。 誤記が多くてすみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問