Как вызвать метод родительского класса в php

Это рабочий код, но я хочу знать, не используя другой объект (прокомментировал $foo) как я могу использовать printItem() метод class Foo с использованием $bar объект. Новая для программирования концепция, так что, может быть, это слабая вещь, которую нужно спросить, но она не может найти:(

Я использую оператор разрешения области видимости, чтобы использовать printItem() из Foo class, теперь мой вопрос, когда мы можем использовать эту функциональность, тогда какая польза от создания объектов? Когда использовать операторы разрешения контекста в правильной среде кодирования.

<?php

class Foo
{
    public function printItem($string)
    {
        echo "This is in class Foo ". $string ."<br />";
    }

    public function printPHP()
    {
        echo "PHP is great "."<br />";
    }
}

class Bar extends Foo
{
    public function printItem($string)
    {
        echo "This is in class Bar ". $string ."<br />";
    }
}       

//$foo = new Foo;
$bar = new Bar;

$bar->printPHP();
$bar->printItem("Bar class object");
//Foo::printItem("Mental Case");

3 ответа

Решение

Определять printItem как статический метод, и вы можете использовать Foo::printItem("Mental Case");или вызовите его в дочернем методе:

public function printItem($string)
{
    parent::printItem($string);
    echo "This is in class Bar ". $string ."<br />";
}
<?php
class test {

    public function __construct() {}

    public function name() {
       // $this->xname('John');
          $this->showName('John');
    }

    private function showName($name) {
        echo 'my name in test is '.$name;
    }
}

class extendTest extends test {

    public function __construct() {
        parent::__construct();
    }

    private function showName($name) {
        echo 'my name in extendTest is '.$name;
    }
}

$test = new extendTest();
$test->name();
?>

результат: меня зовут Джон

Если мы изменим видимость метода showName на public или protected, то результатом вышеописанного будет: мое имя в exteTest - John

Сделайте printItem статическим методом, добавив ключевое слово static. printItem($string) будет доступен для использования без создания объекта этого класса.

<?php

class Foo
{
    static public function printItem($string)
    {
        echo "This is in class Foo ". $string ."<br />";
    }

    public function printPHP()
    {
        echo "PHP is great "."<br />";
    }
}

class Bar extends Foo
{
    public function printItem($string)
    {
        echo "This is in class Bar ". $string ."<br />";
    }
}       

//$foo = new Foo;
$bar = new Bar;

$bar->printPHP();
$bar->printItem("Bar class object");
//Foo::printItem("Mental Case");
Другие вопросы по тегам