【问题标题】:PHP class: Unable to access array in another functionPHP类:无法访问另一个函数中的数组
【发布时间】:2011-06-21 20:49:27
【问题描述】:

我尝试了很多搜索,但无法弄清楚为什么函数 DoWordLink 中的数组 $wordlinks 没有携带来自函数 __construct 的值。 PHP类代码如下:

<?php

class autolinkkeyword
{

    public $wordlinks = array();

    public function __construct(){
        $query = mysql_query("SELECT keyword FROM library");
                while ($row = mysql_fetch_array($query))
                {
                    $this->wordlinks [$row["keyword"]] = $row["keyword"];
                }
    }               

    public function linkkeywords ($posts)
    {                
            function DoWordLink($match)
            {
                $rpl=$match[1];
                if(isset($wordlinks[$rpl])) 
                {
                        $kword = $this->wordlinks[$rpl];
                        $rpl="<a class=\"keyword_link\" href=\"#\" onclick=\"popup('popUpDiv'); 
                                ajax_loadContent('kword', 'library.php?keyword=$kword')\">$kword</a>";
                        unset($this->wordlinks[$match[1]]);
                }
                return $rpl;
            }

            $wl=array_keys($this->wordlinks);           
            $pm="/((?<=\s|^)(?:" . implode('|',$wl) .")(?=\.|\!|\?|\,|\'|\s|$))/im";
            foreach($posts as $key => $mainbody)
            {
                $mainbody=preg_replace_callback($pm, 'DoWordLink', $mainbody)  ;    
                echo $mainbody;
            }

    }       
}
?>

【问题讨论】:

  • isset($wordlinks[$rpl]) 应该是isset($this-&gt;wordlinks[$rpl])
  • PHP 的嵌套函数不是好人。

标签: php arrays class function scope


【解决方案1】:

您可以将其设为该类的实际方法并使用此方法调用它: http://www.php.net/manual/en/language.pseudo-types.php#language.types.callback 喜欢:

preg_replace_callback($pm, array($this, 'DoWordLink'), $mainbody);

更改 DoWordLink 函数,使其成为类的一部分,例如:

class autolinkkeyword
{
  function DoWordLink($match)
  {
    $rpl=$match[1];
    if(isset($this->wordlinks[$rpl])) 
    {
      $kword = $this->wordlinks[$rpl];
      $rpl="<a class=\"keyword_link\" href=\"#\" onclick=\"popup('popUpDiv'); 
      ajax_loadContent('kword', 'library.php?keyword=$kword')\">$kword</a>";
      unset($this->wordlinks[$match[1]]);
    }
    return $rpl;
  }
}

【讨论】:

    【解决方案2】:

    你不是在这里缺少一个“this->”结构吗? if(isset($this-&gt;wordlinks[$rpl]))

    【讨论】:

      【解决方案3】:

      在您引用 $wordlinks 的任何地方都使用 $this。

      $this->wordlinks
      

      【讨论】:

        【解决方案4】:

        您也需要使用对象访问器访问linkkeywords-方法中的属性!

        public function linkkeywords ($posts)
        {
        
           // Here use $this->wordlinks not $wordlinks
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-19
          • 2012-05-03
          • 1970-01-01
          • 1970-01-01
          • 2011-04-03
          • 1970-01-01
          • 2014-08-11
          相关资源
          最近更新 更多