NP_cles()

1234567891011121314151617181920212223242526272829

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

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

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/ <%HatenaAuth()%> 

    hsur wrote:

    ひぐちさん

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

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

    2008-03-05 22:11 <%HatenaAuth()%> 

    Add Comments

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

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

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