问题说的都是真的。
我在父类中定义了常量。我试过$this->CONSTANT_1
,但它没有用。
class MyParentClass{
const CONSTANT_1=1
}
class MyChildClass extends MyParentClass{
//want to access CONSTANT_1
}
答案 0 :(得分:20)
我认为您需要像这样访问它:
self::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
答案 1 :(得分:6)
您还可以使用 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;
答案 2 :(得分:4)
您不必使用parent
。您可以使用self
首先检查constant
本身中是否有class
同名,然后它会尝试访问parents
constant
所以self
更具通用性,可以“覆盖”parents
constant
,而不会实际覆盖它,因为您仍然可以通过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
答案 3 :(得分:2)
<?php
class MyParentClass{
const CONSTANT_1=123;
}
class MyChildClass extends MyParentClass{
public static function x() {
echo parent::CONSTANT_1;
}
}
MyChildClass::x();
答案 4 :(得分:0)
使用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();
OR:
class MyParentClass{
const CONSTANT_1=1;
}
class MyChildClass extends MyParentClass{
MyParentClass::CONSTANT_1; // here you you get access to CONSTANT_1 too
}
答案 5 :(得分:0)
您要使用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.
}
}
查看PHP手册中的ways to access class constants inside and outside of the class definition。