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

时间:2014-01-10 13:15:07

标签: php class oop

问题说的都是真的。

我在父类中定义了常量。我试过$this->CONSTANT_1,但它没有用。

class MyParentClass{

    const CONSTANT_1=1
}

class MyChildClass extends MyParentClass{

 //want to access CONSTANT_1  

}

6 个答案:

答案 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();

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

答案 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