プロジェクト

全般

プロフィール

Bug(バグ) #1860

php5.3 の環境でOpenPNE3に同梱しているPEARのライブラリを読み込んだ際にエラーになる

Shinichi Urabe13年以上前に追加. 約4年前に更新.

ステータス:
New(新規)
優先度:
Normal(通常)
担当者:
-
対象バージョン:
開始日:
2010-12-29
期日:
進捗率:

0%

3.6 で発生するか:
Yes
3.8 で発生するか:
Unknown (未調査)

説明

現象

PEAR の Calendar ライブラリを読み込むと発生

Deprecated: Assigning the return value of new by reference is deprecated in /opt/local/apache2/htdocs/OpenPNE3/lib/vendor/PEAR/Calendar/Month/Weekdays.php on line 132

Deprecated: Assigning the return value of new by reference is deprecated in /opt/local/apache2/htdocs/OpenPNE3/lib/vendor/PEAR/Calendar/Calendar.php on line 460

原因

オブジェクトを参照渡しにしている箇所がある PHP 5.3 ではエラーになる

[urabe@mac PEAR]$ ack -a "&( *?)new" 
Amazon/HTTP/Request.php
110: * $a = &new HTTP_Request('http://www.yahoo.com/');
402:        $this->_url = &new Net_URL($url, $this->_useBrackets);
720:            $this->_sock =& new Net_Socket();
733:            $this->_response = &new HTTP_Response($this->_sock, $this->_listeners);
778:                $this->_url = &new Net_URL($redirect);

Amazon/Services/AmazonECS4.php
1060:        $http = &new HTTP_Request($url);
1087:        $xml = &new XML_Unserializer();

Amazon/XML/Parser.php
576:        $err = &new XML_Parser_Error($msg, $ecode);

Amazon/XML/Unserializer.php
236: * $unserializer = &new XML_Unserializer();
689:                    $value['value'] = &new $classname;
691:                    $value['value'] = &new $this->options[XML_UNSERIALIZER_OPTION_DEFAULT_CLASS];
850:        $this->_parser = &new XML_Parser($this->options[XML_UNSERIALIZER_OPTION_ENCODING_SOURCE], 'event', $this->options[XML_UNSERIALIZER_OPTION_ENCODING_TARGET]);

Calendar/Calendar.php
460:            $this->validator = & new Calendar_Validator($this);

(略)

修正内容

参照渡しを使っているPERAのバージョンをあげて対処が可能なものは対処して、使っていないようなライブラリは削除でいいかと考えられます

履歴

#1 Kousuke Ebihara13年以上前に更新

修正内容について、気になった点があるので補足させてください。

参照渡しを使っているPERAのバージョンをあげて対処が可能なものは対処して、使っていないようなライブラリは削除でいいかと考えられます

  • 参照渡しではなく参照代入です
  • PHP 4 時代では、オブジェクトの代入がコピーになっていたため、オブジェクトの参照代入はメモリ使用量を抑えるテクニックとして多用されていました。したがって、 PEAR ライブラリのバージョンを上げたとしても、そのライブラリが PHP 4 対応を重視している場合は対応がおこなわれていない可能性があります
  • オブジェクトの参照代入は、たしかに、スクリプトのパース時点で発生する警告であるため、「使っていないようなライブラリは削除でいい」とする気持ちもわからないでもないですが(とはいえ、スクリプトファイルを読み込まなければ警告は発生しないのですが)、その対応は後方互換性を壊します。そのライブラリに依存するプラグインなどがあった場合に、動作しないなどの影響を受けることでしょう。ライブラリを削除するのが悪いとは言いませんが、使用状況を調べるなどくれぐれも慎重に対処してください。また、安定版ではその対処はおこなわないでください
    • 状況次第では、ライブラリを読み込むタイミングで一時的に E_DEPRECATED をエラーレベルから外すなどの対処をしたほうがインパクトが少ないのではないかと思われます

#2 Kousuke Ebihara13年以上前に更新

  • 3.6 で発生するかYes にセット

#3 Shingo Yamadaほぼ13年前に更新

  • 優先度Normal(通常) から High(高め) に変更

#4 Shingo Yamadaほぼ13年前に更新

  • 優先度High(高め) から Normal(通常) に変更

#5 kaoru n約4年前に更新

  • 対象バージョンOpenPNE 3.10.x にセット

他の形式にエクスポート: Atom PDF