我将详细说明您的情况。让我们看看你的代码:
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 文件,直到找到一个孩子,然后将其返回(函数结束)。这很酷,但你不应该这样做 - 任何人都会告诉你,你应该总是在函数的 end 处return。
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);