Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在laravel 5.4中调用函数中的一个函数_Php_Laravel 5.4 - Fatal编程技术网

Php 在laravel 5.4中调用函数中的一个函数

Php 在laravel 5.4中调用函数中的一个函数,php,laravel-5.4,Php,Laravel 5.4,我之前的问题是 关于这一点,我尝试在laravel中实现相同的东西。它会给我类似于DOMXPath::query()的错误:无法调用处理程序hasClass(),然后我使用了如下类似的方法 我的拉威尔代码: function hasClasses($attrValue, $requiredClasses) { $requiredClasses = explode(' ', $requiredClasses); $classes = preg_split('~\s+~', $att

我之前的问题是

关于这一点,我尝试在laravel中实现相同的东西。它会给我类似于
DOMXPath::query()的错误:无法调用处理程序hasClass()
,然后我使用了如下类似的方法

我的拉威尔代码:

function hasClasses($attrValue, $requiredClasses)
{
    $requiredClasses = explode(' ', $requiredClasses);
    $classes = preg_split('~\s+~', $attrValue, -1, PREG_SPLIT_NO_EMPTY);

    return array_diff($requiredClasses, $classes) ? false : true;
}


function getScrapedata($keyword = 'laravel')
{
    $client = new Client();
    $client->setHeader('user-agent', "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3");
    $crawler = $client->request('GET', 'http://duckduckgo.com/?q=' . $keyword);
    $string = $crawler->filter('div#links.results')->html();

    $dom = new \DOMDocument;
    $state = libxml_use_internal_errors(true);
    $dom->loadHTML($string);
    libxml_use_internal_errors($state);

    $xp = new \DOMXPath($dom);
    $xp->registerNamespace('php', 'http://php.net/xpath');
    $xp->registerPhpFunctions('hasClasses');

    $mainDivClasses = 'result results_links results_links_deep web-result';
    $childDivClasses = 'links_main links_deep result__body';

    $divNodeList = $xp->query('//div[php:functionString("' . $this->hasClasses('class', $mainDivClasses) . '")]
                               /div[php:functionString("' . $this->hasClasses('class', $mainDivClasses) . '")]');

    $array_data = [];
    foreach ($divNodeList as $divNode) {
        $array_data[] = [
            trim($xp->evaluate('string(./h2/a[@class="result__a"])', $divNode)),
            trim($xp->evaluate('string(.//a[@class="result__snippet"])', $divNode)),
            trim($xp->evaluate('string(.//a[@class="result__url"])', $divNode)),
        ];
    }

    dd($array_data);
}
然后它开始给我另一个错误,这个
DOMXPath::query():无法调用处理程序()

因此,实际误差如下:

$divNodeList = $xp->query('//div[php:functionString("'.$this->hasClasses('class',$mainDivClasses).'")]
                               /div[php:functionString("'.$this->hasClasses('class',$mainDivClasses).'")]');

有人能帮我解决这个问题吗。如何准确地调用函数?

解决此问题的一种方法是将
hasClasses
方法更改为:

static function hasClasses($attrValue, $requiredClasses)
那么你应该能够做到:

$divNodeList = $xp->query('//div[php:functionString("' . static::class . '::hasClasses", @class, "' . $mainDivClasses . '")]
                   /div[php:functionString("' . static::class . '::hasClasses", @class, "' . $childDivClasses . '")]');

希望这有帮助

这是在一个类中还是仅仅是函数?两者都在同一个类中@RossWilson@RossWilson:您对此有任何解决方案吗?
DOMXPath::query():不允许调用处理程序'App\Http\Controllers\HomeController::hasClasses()”。
这就是错误所在got@5367683在这种情况下,你能添加这些函数所在的整个类吗?我的类名是
HomeController
我需要添加这个吗?@5367683此时我不知道你可能需要做什么…如果你不介意添加这些函数所在的整个类,并且还展示了如何调用
getScrapedata
方法/函数,我应该能够帮助您:)是的,解决了这个问题。谢谢:)