我是php的新手,我对这段代码有疑问
我不明白,为什么'echo'打印:x?错误3000
3000是关键,确实应该打印“扫描仪错误”......
我的代码有什么问题?谢谢你们每个人......
<?php
// ....................................... sym
class Error
{
const lexer = 1000 ;
const parser = 2000 ;
const scanner = 3000 ;
}
final class err extends Error
{
public $stringerr = array (
lexer => "Lexer error" ,
parser => "Parser error" ,
scanner => "Scanner error"
) ;
public function error ( $x )
{
echo "\nx" . " ? " . $stringerr[ $x ] . " error ";
return $x ;
}
}
?>
echo err::error( err::scanner ) ;
输出:
x ? error 3000
答案 0 :(得分:1)
如果我理解正确
err::scanner
= 3000
$stringerr[ $x ]
== $stringerr[3000]
您需要执行err::error('scanner');
或:
public $stringerr = array (
1000 => "Lexer error",
2000 => "Parser error",
3000 => "Scanner error"
);
并且,$stringerr[ $x ]
应为$this->stringerr[$x]
答案 1 :(得分:1)
echo用于在屏幕上打印+在您返回的$ x函数中没有收到任何更改。
尝试:
return $stringerr[$x];
而不是:
echo "\nx" . " ? " . $stringerr[ $x ] . " error ";
return $x;
答案 2 :(得分:1)
在调用静态函数时,您的错误是使用非静态属性。你可以看到关于它的php通知:
PHP注意:未定义的变量:stringerr in 第19行的file.php
您应该将属性定义为静态并通过类名应用于该属性:
<?php
class Error
{
const lexer = 1000 ;
const parser = 2000 ;
const scanner = 3000 ;
}
final class err extends Error
{
public static $stringerr = array (
Error::lexer => "Lexer error" ,
Error::parser => "Parser error" ,
Error::scanner => "Scanner error"
) ;
public static function error ( $x )
{
echo "\nx" . " ? " . err::$stringerr[ $x ] . " error ";
return $x ;
}
}
echo err::error( err::scanner ) ;
?>
打印:
x ? Scanner error error 3000
提到,我故意将错误功能定义为静态。
或者定义此类的实例并使用$this
:
<?php
class Error
{
const lexer = 1000 ;
const parser = 2000 ;
const scanner = 3000 ;
}
final class err extends Error
{
public $stringerr = array (
Error::lexer => "Lexer error" ,
Error::parser => "Parser error" ,
Error::scanner => "Scanner error"
) ;
public function error ( $x )
{
echo "\nx" . " ? " . $this->stringerr[ $x ] . " error ";
return $x ;
}
}
$var = new err();
echo $var->error( Error::scanner ) ;
?>