我正试图通过使用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>';
}
}
}
}
?>