[PHP7][PHP4] 2種類のコンストラクタ( __construct(), CLASSNAME() )を混在させる

  • 元のタイトル: PHP 4 互換のコンストラクタを __construct() メソッドに置き換える
  • ページ: BugTrack2
  • 投稿者: bee
  • 優先順位: 普通
  • 状態: 完了
  • カテゴリー: 本体バグ
  • 投稿日: 2016-10-30 (日) 12:37:29
  • バージョン: 1.5.1
  • リリース予定バージョン: 1.5.2

メッセージ

PHP 7.0 から古い形式のコンストラクタは非推奨となり、E_DEPRECATED が発生するようになりました。
将来のバージョンアップにおいて障害となる可能性があるため、可能なうちに置き換えておくべきだと思います。

公式ドキュメントより

警告
古い形式のコンストラクタは PHP 7.0 で 非推奨 となりました。 
将来のバージョンで削除されるでしょう。新しいコードでは常に __construct() を使うべきです。

php.net:manual/ja/language.oop5.decon.php

patch

ja.osdn.net:users/beec1e/pastebin/4311

ただし、PHP 4.x では動作しなくなります。


  • バグを立ててから気付いたのですが、A->__construct() と A->A() の2つを作り、A->A() が A->__construct() を呼ぶ(もしくは逆の)形にすれば PHP 4/5/7 で互換が取れるようになる? -- bee 2016-10-30 (日) 12:45:55
  • 将来的な関連という事で。BugTrack2/388 最低動作環境を PHP 4.1.2 から PHP 5.x にする -- 2016-11-01 (火) 20:54:04
  • エイリアスあるいは(再)初期化の本体部分となる関数に対して不適切な呼び出しが行われないよう注意書きコメントが必要かもしれませんが、クラス名メソッドから__construct() を呼び出すといった使い方はいちおう可能ですよ。警告が出る条件(両方存在しているときは別のが出るとか)によっては、エラー数が減らないかもしれませんけど。 -- 2016-11-01 (火) 21:26:15
  • ふと思ったのですが、提案部分で示されているドキュメント文章よりも少し後ろにある
    PHP 5.3.3 以降、名前空間つきのクラス名の最後の部分と同じ名前のメソッドは
    コンストラクタとみなされなくなりました。 名前空間を使っていないクラスは今までと変わりません。
    という記載内容の方が、PukiWikiを名前空間の中で使おうとする際の問題となってるような気も -- 2016-11-01 (火) 21:29:53
  • 勉強になります。とはいえ、PHP 4 互換コードを書くためのコーディング規約を作って徹底しなきゃいけないかも…と考えるとあまり…(誰も新規コードを書かないし開発しないならこの件だけで済ませていいんですけどね) -- bee 2016-11-02 (水) 14:40:21
  • うっ。EUC-JP 版と UTF-8 版が併存してるので正規表現も何かしら規約が必要(preg* だと文字化けするかも / mb_ereg* 使ったほうがいいかも)ですよね、って書こうとしたら mbstring は PHP 4.2.0 以降のみ、使わないでって話を見つけてしまった…。 BugTrack/436 -- bee 2016-11-02 (水) 15:33:35
    • ちなみに preg* が Unicode サポートしない可能性がある(PCRE のコンパイルオプションに依存する)ので UTF-8 であっても mb_ereg* を使ったほうがいいという話もありますね…。d.hatena.ne.jp/hnw/20090628 -- bee 2016-11-02 (水) 15:58:47
    • まあ、そもそも u 修飾子を使ってる箇所がなさそうですけど。 -- bee 2016-11-02 (水) 16:04:18
  • できれば積極的にPHP4で動かなくなる変更は入れたくないのですけど、E_DEPRECATEDは放っておくと次のバージョンで動かなくなりますからね… -- umorigu 2016-11-04 (金) 08:56:48
  • PHP7 で __construct() と A() の両方があると、E_DEPRECATEDにもならずA()の方は単純に無視されますね。とりあえずこれします -- umorigu 2016-11-04 (金) 20:59:26
  • 対応しました。まだPHP4で動きます。 1 2 Merge -- umorigu 2016-11-06 (日) 18:08:02
  • 対応ありがとうございます && お疲れさまでした。 -- bee 2016-11-09 (水) 01:15:59
  • あれからいろいろ考え直してみたのですが、PHP 4 対応を単純にやめようという話ではなく 1.6/2.0 を見据えたロードマップの話をした上でそういう話をするべきだった(次期リリースが 1.5.x なら動作環境は変えられない)なと。 -- bee 2016-11-09 (水) 01:24:49
    • といっても新参の私が「2.0はこうあるべきだ」なんて主張するのはアレなのですが…。 -- bee 2016-11-09 (水) 01:25:48
    • 1.4.8 相当のパッチが branch_r1_6 に置かれていることすら知らなかったので、ちょっと半年ROMって来ます。 -- bee 2016-11-09 (水) 01:30:03
    • 「いずれ動作環境を PHP x.y.z or later に変えるときのためのブランチを作ろう」って提案して、そっちにパッチを溜めておく(PHP 7.x で動かなくなったら適宜 cherry-pick する)感じの運用のほうが絶対楽ですよね…すみませんそこまで頭が回らなかった…。 -- bee 2016-11-09 (水) 01:36:52
    • 私も新参ですし、またそれで判断が変わることはないので提案は大歓迎です。「できるだけ多くの環境で動作させる」という方針を個人的に気に入っているのと、PukiWikiはPHP部分をカスタマイズして使われていることが多い(と推測される)ため、ドラスティックな変更はできるだけ入れたくないのが正直なところです。既設サイトのバージョンアップが難しくなると「PukiWikiはもう止めよう」ということにもなりかねなく、互換性はこのProductにとって生命線なのです -- umorigu 2016-11-10 (木) 01:14:50
    • branch_r1_6 は1.4.8になるはずだった実装ですが、バグ修正については取り込み済みで、今ではほぼ「スパム対策機能」のブランチになっています。ただ、1.5でこれを取り込む目途は立っていません -- umorigu 2016-11-10 (木) 01:27:04


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-11-10 (木) 01:28:10
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.291 sec.

OSDN