Project

General

Profile

Bug(バグ) #1860

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

Added by Shinichi Urabe over 11 years ago. Updated over 2 years ago.

Status:
New(新規)
Priority:
Normal(通常)
Assignee:
-
Target version:
Start date:
2010-12-29
Due date:
% Done:

0%

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

Description

現象

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のバージョンをあげて対処が可能なものは対処して、使っていないようなライブラリは削除でいいかと考えられます

History

#1 Updated by Kousuke Ebihara over 11 years ago

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

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

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

#2 Updated by Kousuke Ebihara over 11 years ago

  • 3.6 で発生するか set to Yes

#3 Updated by Shingo Yamada about 11 years ago

  • Priority changed from Normal(通常) to High(高め)

#4 Updated by Shingo Yamada about 11 years ago

  • Priority changed from High(高め) to Normal(通常)

#5 Updated by kaoru n over 2 years ago

  • Target version set to OpenPNE 3.10.x

Also available in: Atom PDF