数组键值的php问题

数组键值的php问题,php,arrays,associative,Php,Arrays,Associative,我是php新手,这段代码有问题 我不明白,为什么“回声”打印:x?错误3000 3000是一把钥匙,确实应该是打印“扫描仪错误” 我的代码出了什么问题?谢谢大家 <?php // ....................................... sym class Error { const lexer = 1000 ; const parser = 2000 ; const scanner = 3000 ; } final cla

我是php新手,这段代码有问题

我不明白,为什么“回声”打印: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 ) ;

如果我理解正确的话

err::scanner
=3000

$stringerr[$x]
==
$stringerr[3000]

您需要执行
err::error('scanner')

或:


如果我理解正确的话,
$stringerr[$x]
应该是
$this->stringerr[$x]

err::scanner
=3000

$stringerr[$x]
==
$stringerr[3000]

您需要执行
err::error('scanner')

或:


而且,
$stringerr[$x]
应该是
$this->stringerr[$x]

echo用于在屏幕上打印+在返回未收到任何更改的$x的函数中

尝试:

而不是:

echo "\nx" . " ? " . $stringerr[ $x ] . " error ";
return $x;

echo用于在屏幕+上打印返回未收到任何更改的$x的函数

尝试:

而不是:

echo "\nx" . " ? " . $stringerr[ $x ] . " error ";
return $x;

您的错误是在调用静态函数时使用了非静态属性。您可以看到关于它的php通知:

PHP注意:未定义变量:中的stringerr 第19行的file.php

方法1 您应该将属性定义为静态并通过类名应用于它:

<?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 ) ;
?>
请注意,我故意将错误函数定义为静态的

方法2 或者定义此类的实例并使用
$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 ) ;
?>


您的错误是调用静态函数时使用了非静态属性。您可以看到关于它的php通知:

PHP注意:未定义变量:中的stringerr 第19行的file.php

方法1 您应该将属性定义为静态并通过类名应用于它:

<?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 ) ;
?>
请注意,我故意将错误函数定义为静态的

方法2 或者定义此类的实例并使用
$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 ) ;
?>


只需将echo$x放在这一行之前-echo“\nx”。“…您将了解问题所在。只需将echo$x放在这一行之前-echo”\nx“。”。。。。你会明白什么是错的。我相信这是一个很好的提示开始,我可以编辑它后,我知道它显示什么。我相信这是一个很好的提示开始,我可以编辑它后,我知道它显示什么。
<?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 ) ;
?>