NP_cles()

123456789101112131415161718192021222324252627282930
::
Home > NP_cles() > php5にすると$thisの扱いが厳密になる

php5にすると$thisの扱いが厳密になる

  
投稿者:hsur 投稿日時:2008-03-04 - 23:55
カテゴリー:Programming - - トラックバック(0)- Views: 2366

PHP5に移行してからNP_SearchedPhraseの検索語ランキングが出力されなくなってしまったのですが、このエラーの原因についてはちゃんとerror_logに出力されていました。

PHP Fatal error: Using $this when not in object context in NP_SearchedPhrase.php on line 262

どうやら、PHP5からはクラス定義の中以外で$thisという変数を使うとFatal Errorとなるようです。NP_SearchedPhraseの中で$thisが使われているのはrankList()の部分です。プログラムを読む限りでは呼び出し時の引数と、関数定義の仮引数名を同一にしているだけのようだったので、この関数内の$thisを$tに書き換えて回避することができました。

php5にすると細かい部分でチェックが厳しくなっていたりしますね。まぁ、$thisは予約語みたいなものですし・・・・・こういうチェックを入れること自体はプログラムの健全性に貢献するので互換性の問題を抜きにすれば賛成ではあるんですが。。。。

NP_SearchedPhrase.php.diff

ということで、サクッとパッチを書いてみました。

--- NP_SearchedPhrase.php.org   2008-03-04 10:04:09.275941947 +0900
+++ NP_SearchedPhrase.php       2008-03-04 10:08:01.940760052 +0900
@@ -248,7 +248,7 @@
 
 }
 
-function rankList($this, $item, $cat, $rows, $disp_length) {
+function rankList($t, $item, $cat, $rows, $disp_length) {
     if (is_numeric($item) && $item) {
         $res = mysql_query('SELECT query_phrase, query_count FROM ' . sql_table('plugin_searched_phrase_count') . " WHERE item_id=$item AND cat_id=0 ORDER BY query_count DESC LIMIT 0, $rows");
     } else { // We're in an index page
@@ -259,16 +259,16 @@
         }
     }
     if (mysql_num_rows($res)) {
-        $site_search_url = $this->getOption('SearchURL');
+        $site_search_url = $t->getOption('SearchURL');
 
-        $domains = $this->getOption('SiteSearchDomains');
-        $sitesearch = $this->getOption('SiteSearchSitesearch');
-        $client = $this->getOption('SiteSearchClient');
-        $forid = $this->getOption('SiteSearchForid');
-        $ie = $this->getOption('SiteSearchIe');
-        $oe = $this->getOption('SiteSearchOe');
-        $hl = $this->getOption('SiteSearchHl');
-        $cof = $this->getOption('SiteSearchCof');
+        $domains = $t->getOption('SiteSearchDomains');
+        $sitesearch = $t->getOption('SiteSearchSitesearch');
+        $client = $t->getOption('SiteSearchClient');
+        $forid = $t->getOption('SiteSearchForid');
+        $ie = $t->getOption('SiteSearchIe');
+        $oe = $t->getOption('SiteSearchOe');
+        $hl = $t->getOption('SiteSearchHl');
+        $cof = $t->getOption('SiteSearchCof');
 
         $site_search_options = ($domains ? "&domains=" . urlencode($domains) : "") .
             ($sitesearch ? "&sitesearch=" . urlencode($sitesearch) : "") .

このエントリは役に立ちましたか?

(反応によって開発のプライオリティが変わることがあります)

トラックバックについて [policy]

Trackback URL:
Trackbacks
このエントリにトラックバックはありません

Comments [policy]

[OpenID] wrote:

うへ。おはずかしい。
さっそく修正して、そのほかたまったアップデートを入れた新しいバージョン v1.1 をリリースしました。

http://www.higuchi.com/doku...

2008-03-05 11:35 http://www.higuchi.com/  

hsur wrote:

ひぐちさん

お疲れ様です。。。。
早速、アップデートしてみました。

# どこにパッチ送ったらいいかどうか分からなくて、いきなり自分のところに貼ってしまいました。。。。

2008-03-05 22:11  

Add Comments

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン

★下記に2つの英単語をスペースで区切って入力してください