- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2016-10-30T12:46:54+09:00","","")
#author("2016-11-01T21:35:55+09:00","","")
* PHP 4 互換のコンストラクタを __construct() メソッドに置き換える [#neb4170a]
- ページ: [[BugTrack2]]
- 投稿者: [[bee]]
- 優先順位: 普通
- 状態: 提案
- カテゴリー: 本体バグ
- 投稿日: 2016-10-30 (日) 12:37:29
- バージョン: 1.5.1
** メッセージ [#nea1352a]
PHP 7.0 から古い形式のコンストラクタは非推奨となり、E_DEPRECATED が発生するようになりました。~
将来のバージョンアップにおいて障害となる可能性があるため、可能なうちに置き換えておくべきだと思います。
*** 公式ドキュメントより [#h15d634b]
警告
古い形式のコンストラクタは PHP 7.0 で 非推奨 となりました。
将来のバージョンで削除されるでしょう。新しいコードでは常に __construct() を使うべきです。
[[php.net:manual/ja/language.oop5.decon.php]]
*** patch [#l9516f88]
[[ja.osdn.net:users/beec1e/pastebin/4311]]
ただし、PHP 4.x では動作しなくなります。
--------
- バグを立ててから気付いたのですが、A->__construct() と A->A() の2つを作り、A->A() が A->__construct() を呼ぶ(もしくは逆の)形にすれば PHP 4/5/7 で互換が取れるようになる? -- [[bee]] &new{2016-10-30 (日) 12:45:55};
- 将来的な関連という事で。[[BugTrack2/388]] 最低動作環境を PHP 4.1.2 から PHP 5.x にする -- &new{2016-11-01 (火) 20:54:04};
- エイリアスあるいは(再)初期化の本体部分となる関数に対して不適切な呼び出しが行われないよう注意書きコメントが必要かもしれませんが、クラス名メソッドから__construct() を呼び出すといった使い方はいちおう可能ですよ。警告が出る条件(両方存在しているときは別のが出るとか)によっては、エラー数が減らないかもしれませんけど。 -- &new{2016-11-01 (火) 21:26:15};
- ふと思ったのですが、提案部分で示されているドキュメント文章よりも少し後ろにある
PHP 5.3.3 以降、名前空間つきのクラス名の最後の部分と同じ名前のメソッドは コンストラクタとみなされなくなりました。 名前空間を使っていないクラスは今までと変わりません。
という記載内容の方が、PukiWikiを名前空間の中で使おうとする際の問題となってるような気も -- &new{2016-11-01 (火) 21:29:53};
#comment