10/10/2018, 00:20

mong mọi người giúp đỡ (parent trong php)?

mình có code như sau:
PHP Code:
<?php
class A
{
    public 
$name;
    function 
__construct($name)
    {
        
$this->name=$name;
    }
}
class 
extends A
{
    function 
view()
    {
        echo 
parent::$name;
    }
}

$c=new B("kaka");
$c->view();
?>
nhưng mà không hiểu sao khi chạy lại trắng trơn, mong các pro giúp đỡ
natostr viết 02:21 ngày 10/10/2018
bạn có truyền giá trị nào cho biến $name đâu mà kêu nó xuất ra cho bạn nhỉ?
Thay vì để cái cóntruction ở class A bạn phải để nó ở class B mới đúng và phải sửa thành: parent::$name = $name; thay vì $this->name=$name;
hunghao85 viết 02:23 ngày 10/10/2018
nói vậy chứ tôi sửa chương trình lại thế này
PHP Code:
<?php
class A
{
    public 
$name;
    function 
__construct($name)
    {
        
$this->name=$name;
    }
}
class 
extends A
{
    function 
view()
    {
        echo 
parent::$name;
    }
}
$d=new A("junio");
$c=new B("kaka");
$c->view();
?>
sao lại vẫn không được lúc này thì $name được truyền rồi còn gì. Constructor ở class A thì nó vẫn được kế thừa ở class B chứ.
- Mà vừa rồi tôi tắt Display error nên không thấy lỗi bây giờ thấy nò báo là
Code:
Fatal error: Access to undeclared static property: A::$name in C:\web\apache2_2\htdocs\thu.php on line 22
vậy có phải rằng parent không truy nhập được vào thành viên lớp không(không phải static member)mong các bạn giải thích.
jiSh@n viết 02:26 ngày 10/10/2018
Được gửi bởi hunghao85
nói vậy chứ tôi sửa chương trình lại thế này
PHP Code:
<?php
class A
{
    public 
$name;
    function 
__construct($name)
    {
        
$this->name=$name;
    }
}
class 
extends A
{
    function 
view()
    {
        echo 
parent::$name;
    }
}
$d=new A("junio");
$c=new B("kaka");
$c->view();
?>
sao lại vẫn không được lúc này thì $name được truyền rồi còn gì. Constructor ở class A thì nó vẫn được kế thừa ở class B chứ.
- Mà vừa rồi tôi tắt Display error nên không thấy lỗi bây giờ thấy nò báo là
Code:
Fatal error: Access to undeclared static property: A::$name in C:\web\apache2_2\htdocs\thu.php on line 22
vậy có phải rằng parent không truy nhập được vào thành viên lớp không(không phải static member)mong các bạn giải thích.
Đừng nhầm lẫn class và object. Đọc kỹ lại lý thuyết về OOP sẽ tự tìm thấy câu trả lời Đây là vấn đề căn bản trong thừa kế của OOP.
hunghao85 viết 02:26 ngày 10/10/2018
cảm ơn jiSh@n, bạn cho mình hỏi một câu nữa là self:: và parent có accsess được vào các thuộc tính (không phải các thành viên tĩnh)không ví dụ
PHP Code:
<?php
class A
{
    public 
$name;
    function 
set($name)
    {
        
$this->name=$name;
    }
    function 
view()
    {
        echo 
self::$name;
    }
}
$a=new A();
$a->set("kaka");
$a->view();
?>
tại sao code trên lại bị lỗi? Thank nhiều
jiSh@n viết 02:36 ngày 10/10/2018
Vẫn như trên, self và parent là class, $this là object. Vẫn phải xem kỹ lý thuyết OOP để tránh các nhầm lẫn cơ bản này.
Bạn cần đọc kỹ về scope resolution operator ( :: ) trong PHP:
http://vn.php.net/language.oop5.paamayim-nekudotayim
alone_night viết 02:34 ngày 10/10/2018
Được gửi bởi hunghao85
mình có code như sau:
PHP Code:
<?php
class A
{
    public 
$name;
    function 
__construct($name)
    {
        
$this->name=$name;
    }
}
class 
extends A
{
    function 
view()
    {
        echo 
parent::$name;
    }
}

$c=new B("kaka");
$c->view();
?>
nhưng mà không hiểu sao khi chạy lại trắng trơn, mong các pro giúp đỡ
Đã là kế thừa thì cho dù protect hay public các biến thành viên đều truy cập được hết, bạn phải thay echo parent::$name; là $this->name;
parent::$name làm j có cái j
Bạn dùng php mấy mà sao tui thay vô toàn lỗi
Tui dùng PHP 4, mới học.
lmdat viết 02:30 ngày 10/10/2018
Được gửi bởi hunghao85
mình có code như sau:
PHP Code:
<?php
class A
{
    public 
$name;
    function 
__construct($name)
    {
        
$this->name=$name;
    }
}
class 
extends A
{
    function 
view()
    {
        echo 
parent::$name;
    }
}

$c=new B("kaka");
$c->view();
?>
nhưng mà không hiểu sao khi chạy lại trắng trơn, mong các pro giúp đỡ
Bạn chỉ cần sửa parent::$name thành $this->name là xong
Bài liên quan
0