在php类中使用函数时出错


Error using function in a php class

我正试图通过使用PHP中的函数来整理我的代码。我知道我的函数确实有效,但当我用PHP创建一个类来存储我的函数时,出现了一个错误

分析错误:语法错误,意外的"get小队"(T_STRING),应为函数(T_function)。

第18行是我调用函数的地方。用于测试的建议。

<?php
include 'simple_html_dom.php';
class squad{
    function getsquad($url){
        $html = file_get_html($url);
        foreach ($html->find('td[align=left]') as $element) {
           if ($element->children(0)) { // work only when children exists
               return $element->children(0)->innertext.'<br>';
           }
        }
    }
    getsquad('$site');
} 
?>

这应该很简单——只是我对PHP还很陌生。

我将详细介绍一下您的情况。让我们看看你的代码:

class squad {
    function getsquad($url){
        $html = file_get_html($url);
        foreach ($html->find('td[align=left]') as $element) {
           if ($element->children(0)) { // work only when children exists
               return $element->children(0)->innertext.'<br>';
           }
        }
    }
    getsquad('$site');
}

因此,首先,不能在类中声明任何逻辑,除非它在函数中。在函数外部所能做的就是为类将要使用的属性进行声明。让我们跳过这个,假设你已经把它改成了这样的东西:

$squad = new squad();
$get_squad = $squad->getsquad();

现在,您在getsquad()函数中使用的逻辑模式是baaaad。循环时返回?坏坏的尼克。通过查看这个函数,我可以假设您所做的是在HTML文件中循环,直到找到子文件,然后返回它(函数结束)。这很酷,但这不是你应该做的——任何人都会告诉你,你应该总是在函数的结尾返回。

function getsquad($url){
    $html = file_get_html($url);
    foreach ($html->find('td[align=left]') as $element) {
       if ($element->children(0)) { // work only when children exists
           return $element->children(0)->innertext.'<br>';
       }
    }
}

所以你应该做的是:

function getsquad($url){
    $html = file_get_html($url);
    $found_child = null;
    foreach ($html->find('td[align=left]') as $element) {
       if ($element->children(0)) { // work only when children exists
           $found_child = $element->children(0)->innertext . '<br>';
           break; // break ends your foreach loop
       }
    }
    return $found_child;
}

此外,就良好的编码实践而言,您不应该格式化来自getsquad()的任何数据——我知道这对您正在做的事情来说可能有些过头了,但这就是您应该做的:

function getsquad($url) {
    $html = file_get_html($url);
    $found_child = null;
    foreach ($html->find('td[align=left]') as $element) {
       if ($element->children(0)) { // work only when children exists
           $found_child = $element->children(0)->innertext;
           break; // break ends your foreach loop
       }
    }
    return $this->format_squad($found_child);
}
private function format_squad($found_child) {
    return $found_child . '<br>';
}

这样做将使您的数据和格式完全分离。它易于维护、阅读和书写。

所以你的最终用法(注意,你需要分配一个变量来存储函数的返回[你的问题和答案中缺少]):

$squad = new squad();
// store it in a variable since it's returning data not outputting
$squad_info = $squad->getsquad($url);

你能试试这个吗,

 $squad = new squad();
 $squad->getsquad($site);

您的代码:

<?php
include 'simple_html_dom.php';
class squad{
function getsquad($url){
$html = file_get_html($url);
  foreach($html->find('td[align=left]') as $element) {
      if ($element->children(0)) { // work only when children exists
          return $element->children(0)->innertext.'<br>';
      }
    }
  }
 } 

// You can use below steps to call the class inside function
$squad = new squad();
$squad->getsquad($site);
?>

不能从类内部调用该方法。您需要加载类,然后调用方法:

<?php
include 'simple_html_dom.php';
$Squad = new squad();
$Squad->getsquad($site);
class squad{
    function getsquad($url){
        $html = file_get_html($url);
        foreach ($html->find('td[align=left]') as $element) {
           if ($element->children(0)) { // work only when children exists
               return $element->children(0)->innertext.'<br>';
           }
        }
    }
} 
?>