php 钩子错误 spl_object_hash() 需要 1 个参数,给定 2 个

php Hook Error spl_object_hash() expects exactly 1 parameter, 2 given

我想创建匿名函数并将它们添加到挂钩中,而不是使用挂钩中定义的函数。 Error:spl_object_hash() 需要 1 个参数,2 个在第 313 行的 D:server\www\deneme\sistem\kanca.php

中给出

错误问题函数benzersiz_Filtre_id()spl_object_hash函数 误用:kanca_cek("panel_main",function(){ return "a";}); 正常使用:kanca_cek("panel_main","db_filter");

function kanca_tak($ad,$fonksiyon,$onem=10,$deger=1){
        return self::filtre_ekle($ad,$fonksiyon,$onem,$deger);
    }
    function kanca_sil($ad,$fonksiyon,$onem=10){
        return self::filtre_sil($ad,$fonksiyon,$onem);
    }
    function tum_kancalari_sil($ad,$onem=false){
        return self::tum_filtreleri_sil($ad,$onem);
    }
    function kanca_sor($ad,$fonksiyon_kontrol=false){
        return self::filtre_sor($ad,$fonksiyon_kontrol);
    }
    function kanca_saydir($ad){
        if(!isset($this->islemSayaci) || !isset($this->islemSayaci[$ad]))
            return 0;
        return $this->islemSayaci[$ad];
    }
    function islemSayaci($ad,$kanca=false){
        $kancaSor=($kanca ? "kanca":"filtre");
        if(isset($this->islemSayaci[$ad][$kancaSor]))
          $this->islemSayaci[$ad][$kancaSor]++;
        else
        $this->islemSayaci[$ad][$kancaSor]=1;
    }
    function kanca_cek($ad,$deger=''){
        $depo = array();
        $uFv=array();
        if (isset($this->filtreler['hepsi'])) {
            $this->guncelFiltre[] = $ad;
            $depo               = func_get_args();
            $this->tum_kancalari_cagir($depo);
        }
        if (!isset($this->filtreler[$ad])) {
            if (isset($this->filtreler['hepsi']))
                array_pop($this->guncelFiltre);
            return;
        }
        if (!isset($this->filtreler['hepsi']))
            $this->guncelFiltre[] = $ad;
        if (is_array($deger) && 1 == count($deger) && isset($deger[0]) && is_object($deger[0])) // array(&$this)
            $depo[] =& $deger[0];
        elseif(!empty($deger))
            $depo[] = $deger;
        for ($a = 2; $a < func_num_args(); $a++)
            $depo[] = func_get_arg($a);

        // Sort
        if (!isset($this->topluFiltreler[$ad])) {
            ksort($this->filtreler[$ad]);
            $this->topluFiltreler[$ad] = true;
        }
        self::islemSayaci($ad,true);
        do {
            foreach ((array) current($this->filtreler[$ad]) as $yaz){
                /**
                *@param $uFv değişkeni call_user_func_array fonksiyonunda kullanıcı tanımlı fonksiyona gönderilecek değerleri içerir
                *@param accepted_args varsa ve gelen değer eğer dizeyse $uFv ile $yaz["accepted_args"] birleştirir $uFv değişkenine atar.
                * @example call_user_func_array gönderilecek değerleri oluşturur.
                */
                    $uFv=array_slice($depo, 0, (int) $yaz['accepted_args']);
                    if(isset($yaz["accepted_args"]) && is_array($yaz["accepted_args"]))
                        $uFv=array_merge($uFv,$yaz["accepted_args"]);
                    if (isset($yaz['fonksiyon']) && !is_null($yaz['fonksiyon']))
                        call_user_func_array($yaz["fonksiyon"], $uFv);
                    //  call_user_func_array($yaz['fonksiyon'], array_slice($depo, 0, (int) $yaz['accepted_args']));
            }


        } while (next($this->filtreler[$ad]) !== false);

        array_pop($this->guncelFiltre);
    }
    function referans_diziyle_kancala($ad,$deger){

        if (isset($this->filtreler['hepsi'])) {
            $this->guncelFiltre[] = $ad;
            $depo               = func_get_args();
            $this->tum_kancalari_cagir($depo);
        }

        if (!isset($this->filtreler[$ad])) {
            if (isset($this->filtreler['hepsi']))
                array_pop($this->guncelFiltre);
            return;
        }

        if (!isset($this->filtreler['hepsi']))
            $this->guncelFiltre[] = $tag;

        // Sort
        if (!isset($this->topluFiltreler[$ad])) {
            ksort($this->filtreler[$ad]);
            $this->topluFiltreler[$ad] = true;
        }

        reset($this->filtreler[$tag]);

        do {
            foreach ((array) current($this->filtreler[$ad]) as $yaz)
                if (isset($yaz['fonksiyon']) && !is_null($yaz['fonksiyon']))
                    call_user_func_array($yaz['fonksiyon'], array_slice($deger, 0, (int) $yaz['accepted_args']));

        } while (next($this->filtreler[$ad]) !== false);

        array_pop($this->guncelFiltre);
    }
    function filtre_ekle($ad,$fonksiyon,$onem,$deger=1,$sadeceKelime=0){
         $fk=($sadeceKelime ? $ad."_".password_hash(rand(0,10000),PASSWORD_DEFAULT):$fonksiyon);
        $cId=self::benzersiz_Filtre_id($ad,$fk,$onem);
        if($sadeceKelime){
            $this->filtreler[$ad][$onem][$cId]=array(
            'deger'=>$fonksiyon,
            'accepted_args'=>$deger,
            'sK'=>$sadeceKelime);
        }
         else{
             $this->filtreler[$ad][$onem][$cId]=array(
            'fonksiyon'=>$fonksiyon,
            'accepted_args'=>$deger,
            'sK'=>$sadeceKelime);
         }
        unset($this->topluFiltreler[$ad]);
    }
    function filtre_sil($ad,$fonksiyon,$onem=10){
        $fSil = self::benzersiz_Filtre_id($ad, $fonksiyon, $onem);

        $varMi = isset($this->filtreler[$ad][$onem][$fSil]);

        if (true === $varMi) {
            unset($this->filtreler[$ad][$onem][$fSil]);
            if (empty($this->filtreler[$ad][$onem]))
                unset($this->filtreler[$ad][$onem]);
            unset($this->topluFiltreler[$ad]);
        }
        return $varMi;
    }
    function tum_filtreleri_sil($ad,$onem=false){
        if (isset($this->filtreler[$ad])) {
                    if (false !== $onem && isset($this->filtreler[$ad][$onem]))
                        unset($this->filtreler[$ad][$onem]);
                    else
                        unset($this->filtreler[$ad]);
                }

                if (isset($this->topluFiltreler[$ad]))
                    unset($this->topluFiltreler[$ad]);

                return true;
    }
    function filtre_sor($ad,$fonksiyon_kontrol=false){
        $sor=!empty($this->filtreler[$ad]);
        if($fonksiyon_kontrol===false || $sor==false)
            return $sor;
        if(!$idSor=self::benzersiz_Filtre_id($ad,$fonksiyon_kontrol,false))
            return false;
        foreach ((array) array_keys($this->filtreler[$ad]) as $onem) {
            if (isset($this->filtreler[$ad][$onem][$idSor]))
                return $onem;
        }
        return false;
    }
    function guncel_filtre(){
        return end($this->guncelFiltre);
    }
    public function filtrele($ad, $deger)
    {
        $depo = array();
        $dondur=null;
        $uFv=array();//call_user_func_array gönderilen Dizisi
        // Do 'all' actions first
        if(isset($this->filtreler["all"]))
        {
            $this->guncelFiltre=$ad;
            $depo=func_get_arg();
            $this->tum_kancalari_cagir($depo);
        }
        if(!isset($this->filtreler[$ad]))
        {
            if(isset($this->filtreler["all"]))
                array_pop($this->guncelFiltre);
            return $deger;
        }
        if (!isset($this->filtreler['hepsi']))
            $this->guncelFiltre[] = $ad;

        // Sort
        if (!isset($this->topluFiltreler[$ad])) {
            ksort($this->filtreler[$ad]);
            $this->topluFiltreler[$ad] = true;
        }
        if (empty($depo))
            $depo = func_get_args();
            $keySifirla = array_map('array_values', $this->filtreler[$ad]);
        do {
            $conDizi=(is_array($keySifirla) ? $keySifirla:(array) $KXC);
            foreach (current($conDizi) as $kx=>$yaz){
                if (isset($yaz['fonksiyon']) && !is_null($yaz['fonksiyon'])) {
                    $depo[1] = $deger;
                }
                if(isset($yaz["deger"])){
                    if(is_array($yaz["deger"])){
                        foreach($yaz["deger"] as $yK)
                             $deger[]=$yK;
                    }else{
                        $deger=$yaz["deger"];
                    }
                }else{
                    if(is_callable($yaz["fonksiyon"]) && $yaz["fonksiyon"] instanceof Closure) {
                $yaz["fonksiyon"]();
                }
                    elseif(function_exists($yaz["fonksiyon"])){
                        /**
                        *@param $uFv değişkeni call_user_func_array fonksiyonunda kullanıcı tanımlı fonksiyona gönderilecek değerleri içerir
                        *@param accepted_args varsa ve gelen değer eğer dizeyse $uFv ile $yaz["accepted_args"] birleştirir $uFv değişkenine atar.
                        * @example call_user_func_array gönderilecek değerleri oluşturur.
                        */
                            $uFv=array_slice($depo, 1, (int) $yaz['accepted_args']);
                            if(isset($yaz["accepted_args"]) && is_array($yaz["accepted_args"]))
                                $uFv=array_merge($uFv,$yaz["accepted_args"]);
                            $deger = call_user_func_array($yaz["fonksiyon"], $uFv);
                        }
                    else{
                        hata_ekle($yaz["fonksiyon"]." fonksiyonu bulunamadı.","hata");
                        return false;
                    }
                }
            }
        } while (next($keySifirla) !== false);

        array_pop($this->guncelFiltre);
            self::islemSayaci($ad);
        return $deger;
    }

    function referans_diziyle_filtrele($ad,$deger){
        // Do 'all' actions first
        if (isset($this->filtrele['all'])) {
            $this->guncelFiltre[] = $ad;
            $depo               = func_get_args();
            $this->tum_kancalari_cagir($depo);
        }

        if (!isset($this->filtrele[$ad])) {
            if (isset($this->filtrele['all']))
                array_pop($this->guncelFiltre);
            return $deger[0];
        }

        if (!isset($this->filtrele['all']))
            $this->guncelFiltre[] = $ad;

        // Sort
        if (!isset($this->topluFiltreler[$ad])) {
            ksort($this->filtrele[$ad]);
            $this->topluFiltreler[$ad] = true;
        }

        reset($this->filtrele[$ad]);

        do {
            foreach ((array) current($this->filtrele[$ad]) as $yaz)
                if (isset($yaz['fonksiyon']) && !is_null($yaz['fonksiyon']))
                    $deger[0] = call_user_func_array($yaz['fonksiyon'], array_slice($deger, 0, (int) $deger['accepted_args']));

        } while (next($this->filtrele[$ad]) !== false);

        array_pop($this->guncelFiltre);

        return $depo[0];
    }
    public function tum_kancalari_cagir($deger)
    {
        reset($this->filtreler['hepsi']);
        do {
            foreach ((array) current($this->filtreler['hepsi']) as $yaz)
                if (isset($yaz['fonksiyon']) && !is_null($yaz['fonksiyon']))
                    call_user_func_array($yaz['fonksiyon'], $depo);

        } while (next($this->filtreler['hepsi']) !== false);
    }
    function dumps(){
        echo "<pre>";
            print_r($this);
                echo "</pre>";
    }
    function benzersiz_Filtre_id($ad,$fonksiyon,$onem){
        static $idSaydir=0;
        if(is_string($fonksiyon))
            return $fonksiyon;
        if(is_object($fonksiyon))
            $fonksiyon=array($fonksiyon,'');
        else
            $fonksiyon=(array) $fonksiyon;
        if(is_object($fonksiyon[0]))
        {
             if(function_exists('spl_object_hash')){
                 return spl_object_hash($fonksiyon[0],$fonksiyon[1]);
             }else{
                 $nesneId=get_class($fonksiyon[0]).$fonksiyon[1];
                if (!isset($fonksiyon[0]->filter_id)) {
                            if (false === $onem)
                                return false;
                            $nesneId .= isset($this->filtreler[$ad][$onem]) ? count((array) $$this->filtreler[$ad][$onem]) : $idSaydir;
                            $fonksiyon[0]->filter_id = $idSaydir;
                            ++$idSaydir;
                        } else {
                            $nesneId .= $fonksiyon[0]->filter_id;
                        }

                        return $nesneId;
                    }
        } else if (is_string($fonksiyon[0])) {
                if(count($fonksiyon)>=2)
                return $fonksiyon[0] . $fonksiyon[1];
                else
                 return $fonksiyon[0];
        }
    }
}

问题函数313行代码

if(function_exists('spl_object_hash')){
                     return spl_object_hash($fonksiyon[0],$fonksiyon[1]);
                 }else{
                     $nesneId=get_class($fonksiyon[0]).$fonksiyon[1];

收到错误的函数

function benzersiz_Filtre_id($ad,$fonksiyon,$onem){
            static $idSaydir=0;
            if(is_string($fonksiyon))
                return $fonksiyon;
            if(is_object($fonksiyon))
                $fonksiyon=array($fonksiyon,'');
            else
                $fonksiyon=(array) $fonksiyon;
            if(is_object($fonksiyon[0]))
            {
                 if(function_exists('spl_object_hash')){
                     return spl_object_hash($fonksiyon[0],$fonksiyon[1]);
                 }else{
                     $nesneId=get_class($fonksiyon[0]).$fonksiyon[1];
                    if (!isset($fonksiyon[0]->filter_id)) {
                                if (false === $onem)
                                    return false;
                                $nesneId .= isset($this->filtreler[$ad][$onem]) ? count((array) $$this->filtreler[$ad][$onem]) : $idSaydir;
                                $fonksiyon[0]->filter_id = $idSaydir;
                                ++$idSaydir;
                            } else {
                                $nesneId .= $fonksiyon[0]->filter_id;
                            }

                            return $nesneId;
                        }
            } else if (is_string($fonksiyon[0])) {
                    if(count($fonksiyon)>=2)
                    return $fonksiyon[0] . $fonksiyon[1];
                    else
                     return $fonksiyon[0];
            }
        } 

如文档所述spl_object_hash 只需要 一个 参数。

所以你使用的部分是错误的

if(function_exists('spl_object_hash')){
                     return spl_object_hash($fonksiyon[0],$fonksiyon[1]);
                 }else{
                     $nesneId=get_class($fonksiyon[0]).$fonksiyon[1];
}

因为你想要一个对象的 ID(散列),我想你的意思是

return spl_object_hash($fonksiyon);
// or
return spl_object_hash($fonksiyon[0]);

您可以删除 function_exists 部分,因为 SPL 是 part of PHP since 5.0