duanliexi1052 2017-03-09 16:02
浏览 53
已采纳

即使在声明之后,变量也是未定义的

My ONE,TWO, and THREE variables are undefined when I try and run the script even though it's defined in the global scope. My A,B, and C variables are considered defined though. At first I thought it was because I'm assigning constant values as keys, but I didn't find anything online that said I couldn't do that.

<?php class aClass
{


    const A = 1;
    const B = 2;
    const C = 3;

    const ONE = 1;
    const TWO = 2;
    const THREE = 3;
    public $arr = [];


    function __construct() {

        $this->createArray();

    }



    function createArray() {

        $this->arr[] = $this->A = [
            $this->ONE => 'one.',
            $this->TWO => 'two',
            $this->THREE => 'three'
            ];

        $this->arr[] = $this->B = [
            $this->ONE => 'one',
            $this->TWO => 'two',
            $this->THREE => 'three',
            ];

        $this->arr[] = $this->C = [
            $this->ONE => 'one',
            $this->TWO => 'two',
            $this->THREE => 'three',
            ];


    }
}


?>
  • 写回答

2条回答 默认 最新

  • dongtanzhu5417 2017-03-09 16:38
    关注

    You do need to change the constants in createArray from $this=> to self::, but that change alone should result in a syntax error:

    $this->arr[] = self::A = [
        self::ONE => 'one.',
        self::TWO => 'two',
        self::THREE => 'three'
    ];
    

    will get you a

    Parse error: syntax error, unexpected '='

    at this line:

    $this->arr[] = self::A = [`
    //                this ^ is the unexpected =
    

    You mentioned using constant values as keys, which is what you're doing with

    self::ONE => 'one.'
    

    but is not what you're doing with

    $this->arr[] = self::A = [ ...
    

    With that line, you're not using self::A as a key, you're actually assigning the following array to self::A (which causes the "unexpected '='" error, because you can't assign things to constants), then assigning self::A to $this->arr[].

    If you want to use self::A as a key in $this->arr, you'll need to do it like this instead:

    $this->arr[self::A] = [
        self::ONE => 'one.',
        self::TWO => 'two',
        self::THREE => 'three'
    ];
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算