Вопросы говорят, что все это действительно.
У меня есть константы, определенные в моем родительском классе. Я пробовал $this->CONSTANT_1
, но он не работает.
class MyParentClass{
const CONSTANT_1=1
}
class MyChildClass extends MyParentClass{
//want to access CONSTANT_1
}
Ответ 1
Я думаю, вам нужно получить к нему доступ следующим образом:
self::CONSTANT_1;
или в качестве альтернативы "parent", который всегда будет значением, установленным в родительском классе (т.е. поддерживается постоянная неизменность):
parent::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
Ответ 2
Вы также можете получить доступ к константе define у детей из родительского метода со статическим ключом.
<?php
class Foo {
public function bar() {
var_dump(static::A);
}
}
class Baz extends Foo {
const A = 'FooBarBaz';
public function __construct() {
$this->bar();
}
}
new Baz;
Ответ 3
Вам не нужно использовать parent
. Вы можете использовать self
, который сначала проверил бы, есть ли constant
с тем же именем в самой class
, тогда он попытается получить доступ к parents
constant
.
So 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
Ответ 4
<?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
Ответ 5
Используйте 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
}
Ответ 6
Вы хотите использовать ключевое слово 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 вы найдете способы доступа к константам класса внутри и вне определения класса.