php 子类是否继承了父常量?如果是,我如何访问它们?

4c8rllxm  于 2023-04-04  发布在  PHP
关注(0)|答案(6)|浏览(174)

问题说明了一切。
我在父类中定义了常量。我尝试了$this->CONSTANT_1,但它不起作用。

class MyParentClass
{
    const CONSTANT_1=1;
}

class MyChildClass extends MyParentClass
{
 // I want to access CONSTANT_1  

}
ryoqjall

ryoqjall1#

我认为你需要像这样访问它:

self::CONSTANT_1;

或者“parent”,它将始终是在父类中建立的值(即,保持常数的不变性):

parent::CONSTANT_1;

在父类和子类中,可以用途:

static::CONSTANT_1;

有趣

有一点值得注意的是,你实际上可以覆盖子类中的const值。

class MyParentClass{

    const CONSTANT_1=1;
}

class MyChildClass extends MyParentClass{

    const CONSTANT_1=2;
}

echo MyParentClass::CONSTANT_1; // outputs 1
echo MyChildClass::CONSTANT_1; // outputs 2
vngu2lb8

vngu2lb82#

你也可以通过 static 键从父方法访问子方法中的常量定义。

<?php

class Foo {

    public function bar() {

        var_dump(static::A);
    }
}

class Baz extends Foo {

    const A = 'FooBarBaz';

    public function __construct() {

        $this->bar();
    }
}

new Baz;
wn9m85ua

wn9m85ua3#

你不一定要使用parent,你可以使用self,它会首先检查class本身是否有同名的constant,然后它会尝试访问parentsconstant
因此self更加通用,并提供了“覆盖”parentsconstant的可能性,而不是实际覆盖它,因为您仍然可以通过parent::显式访问它。
以下结构:

<?php

class parentClass {

    const MY_CONST = 12;

}

class childClass extends parentClass {

    public function getConst() {
        return self::MY_CONST;
    }

    public function getParentConst() {
        return parent::MY_CONST;
    }

}

class otherChild extends parentClass {

    const MY_CONST = 200;

    public function getConst() {
        return self::MY_CONST;
    }

    public function getParentConst() {
        return parent::MY_CONST;
    }
}

导致以下结果:

$childClass = new childClass();
$otherChild = new otherChild();

echo childClass::MY_CONST; // 12
echo otherChild::MY_CONST; // 200

echo $childClass->getConst(); // 12
echo $otherChild->getConst(); // 200

echo $childClass->getParentConst(); // 12
echo $otherChild->getParentConst(); // 12
7rfyedvj

7rfyedvj4#

<?php
class MyParentClass{
    const CONSTANT_1=123;
}

class MyChildClass extends MyParentClass{

    public static function x() {
        echo parent::CONSTANT_1;
    }

}

MyChildClass::x();

示例:http://codepad.org/Yqgyc6MH

wqlqzqxt

wqlqzqxt5#

使用parent,例如:

class MyParentClass{

    const CONSTANT_1=1;
}

class MyChildClass extends MyParentClass{

   function __construct(){
      echo parent::CONSTANT_1;  //here you get access to CONSTANT_1 
   }

}

new MyChildClass();

或:

class MyParentClass{

        const CONSTANT_1=1;
    }

    class MyChildClass extends MyParentClass{

      MyParentClass::CONSTANT_1; // here you you get access to CONSTANT_1 too

    }
lsmd5eda

lsmd5eda6#

您需要使用self关键字。

class Whale
{
    const BLOWHOLES = 1;
}

class BlueWhale extends Whale
{ 
    /**
     * A method that does absolutely nothing useful.
     */
    public function funnyCalculation()
    {
        return self::BLOWHOLES + 2;  // This is the access you are looking for.
    }
}

查看ways to access class constants inside and outside of the class definition的PHP手册。

相关问题