2012-10-18 20 views
6

To jest działający kod, ale chcę wiedzieć bez użycia innego obiektu (skomentował $foo) w jaki sposób mogę użyć metody printItem() z obiektu class Foo przy użyciu obiektu $bar. Nowa koncepcja oop programowania więc może być słaby rzecz zapytać, ale tak naprawdę w stanie zlokalizować :(jak wywołać metodę klasy macierzystej w php

używam zakres rozdzielczości operatora do korzystania printItem() z Foo class, teraz moje zapytanie jest, kiedy możemy korzystać z tej funkcji, to co jest wykorzystanie ? o tworzeniu obiektów Kiedy używać operatorów rozdzielczości zakresie, w odpowiednim środowisku kodowania

<?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"); 

Odpowiedz

15

określić printItem metodę jako statyczne i można korzystać Foo::printItem("Mental Case"); lub nazywają go w metodzie dziecko:.

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

Dzięki za pomoc :) – Trialcoder

2
<?php 
class test { 

    public function __construct() {} 

    public function name() { 
     $this->xname('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(); 
?> 

wynik: Nazywam w teście jest John

Jeśli mamy zmienić widoczność metody showName do publicznej lub zabezpieczony wówczas wynikiem powyższego będą: nazywam w extendTest John

+1

gdzie XName() zdefiniowane i dlaczego to wydrukować „nazywam się John testu?” –

-1

Ustaw printItem jako metodę statyczną, dodając słowo kluczowe "static". printItem ($ string) będzie dostępny do użycia bez tworzenia obiektu tej klasy.

<?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"); 
+0

Uruchomiłem ten kod i znalazłem błąd - FATAL ERROR Nie można wykonać statycznej metody Foo :: printItem() niestatycznie w klasie Bar na linii numer 22 –

Powiązane problemy