#author("2016-11-02T16:04:18+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}; - 勉強になります。とはいえ、PHP 4 互換コードを書くためのコーディング規約を作って徹底しなきゃいけないかも…と考えるとあまり…(誰も新規コードを書かないし開発しないならこの件だけで済ませていいんですけどね) -- [[bee]] &new{2016-11-02 (水) 14:40:21}; - うっ。EUC-JP 版と UTF-8 版が併存してるので正規表現も何かしら規約が必要(preg* だと文字化けするかも / mb_ereg* 使ったほうがいいかも)ですよね、って書こうとしたら mbstring は PHP 4.2.0 以降のみ、使わないでって話を見つけてしまった…。 [[BugTrack/436]] -- [[bee]] &new{2016-11-02 (水) 15:33:35}; -- ちなみに preg* が Unicode サポートしない可能性がある(PCRE のコンパイルオプションに依存する)ので UTF-8 であっても mb_ereg* を使ったほうがいいという話もありますね…。d.hatena.ne.jp/hnw/20090628 -- [[bee]] &new{2016-11-02 (水) 15:58:47}; -- まあ、そもそも u 修飾子を使ってる箇所がなさそうですけど。 -- [[bee]] &new{2016-11-02 (水) 16:04:18}; #comment