本文目錄一覽:
- 1、PHP如何修改父類的私有屬性?
- 2、php父類如何調用子類的靜態方法或變量?
- 3、php中子類怎麼調用父類的變量?
- 4、php取父類裡面的變量只能用$this嗎?
- 5、php的抽象類被子類繼承後,子類實例什麼訪問不了父類的變量?
- 6、PHP子類怎麼調用父類的屬性
PHP如何修改父類的私有屬性?
既然是父類!就應該是:php子類可以訪問父類的私有屬性和方法嗎,php 一共三種公有屬性或方法:
公共 :可以被子類繼承在子類里使用、可被外部調用訪問
收保護:可以被子類繼承在子類里使用
私有 :該類型的屬性或方法只能在該類中使用
php父類如何調用子類的靜態方法或變量?
php父類中怎麼調用子類的的靜態屬性了,Oh,my god,如果被面試官問道這種問題,你一定會說shit,fucky question。你會說我很少這麼做,況且php對於靜態的操作太隨意了,php在父類調用子類的靜態屬性是一件麻煩的事情。我們知道子類中調用父類的靜態屬性,可以用self::的形式。但是父類調用子類如果用self::就只能調用到父類的靜態屬性。那麼,怎麼辦了?php是不是無法做到了?答案當然是否定的,php中還可以使用在父類中用子類的類名來調用的方法。
不過,這當中仍然存在一個問題,就是如果我有多個類繼承了同一個父類,而且父類的某個函數要用到各個子類的靜態屬性的話,就想當trouble了。這裡有個php的朋友提供了一種思路,採用在子類中重載父類的方法使父類得到靜態屬性。父類中使用了get_class函數得到類名,get_class()是父類名,get_class($this)是子類名。好了得到這個再用eval函數做下執行語句就OK啦。例子:
//父類class A {
public function __con(){
//這裡主要為讓大家看清楚,所以打印出來類名,供大家學習
echo(get_class($this)).’/’;
echo(get_class()).’/’;
eval(\$ab = . get_class($this) . ::\$table;);echo $ab;}}//子類Bclass B extends A {
static $table = ‘b table’;
function __construct(){
$this-__con();}}//子類Cclass C extends A{
static $table = ‘c table’;
function cc(){
$this-__con();}}//調用
new B; //輸出結果 B A b table
$c = new C;
上面就是php父類調用子類靜態成員的方法,在子類重載父類的方法還是相當不錯的 ,當時聽朋友提起這個時,就異常激動。父類我們也叫做基類,或者底層類。一般都是最先設計,子類就是根據各個需要來設計,所以我們子類修改的可能性比較大,操作靈活性也比較大。
php中子類怎麼調用父類的變量?
實例:
?php class A{
public $a1=’a1′;
protected $a2=’a2′;
}
class B extends A{
//若A類和B類不在同一文件中 請包含後(include)再操作
public $a1=’b1′;
function test() {
echo $this-a1.’,’; echo $this-a2.’,’; echo “b2_test_hellohr/”;
}
}
$a = new B();
$a-test();
//b1,a2,b2_test_hello
$a-test2();//b1,a2,b2_test_hello//hello!
?
變量的調用:$this-變量名;如果子類中有該變量則調用的是子類中的,
若沒有則調用的是父類中的
php取父類裡面的變量只能用$this嗎?
這個要分的, 變量有兩種,還有一種是靜態變量。
如果像你說的訪問對象中的變量,就必須使用$this, 如果訪問靜態變量可以使用 [ :: ] (兩個冒號)
你看:
class P {
protected $name = ‘Zhang’;
}
class C extends P {
function get() {
return $this – name; // 獲取本對象中的變量,如果沒有則從父類中獲取
}
}
如果獲取靜態變量就不能使用 this 了,因為靜態方法中沒有實例,可以通過你說的方式來獲取
class P {
static $name = ‘Zhang’;
}
class C extends P {
static function get() {
return self::$name; // 獲取本類中的name,如果沒有從父類中獲取
}
static function get2() {
return parent::$name; // 直接獲取父類中的name 等價於: P::$name;
}
}
php的抽象類被子類繼承後,子類實例什麼訪問不了父類的變量?
?php
abstract class aa{
public $aa;
public function vvv(){
}
}
class bb extends aa {
function __construct(){
$this-aa =1;
}
function vvv(){
echo “———–“.$this-aa;
}
}
$p = new bb();
$p-vvv();
?
構造方法寫錯了__construct
PHP子類怎麼調用父類的屬性
?php
class Perpon {
private $Pid;
private $Pname;
private $Page;
private $Psex;
private $Pbirthday;
public function __construct($Pid,$Pname,$Page,$Psex,$Pbirthday)//PHP5中間的構造函數
{ $this-Pid=$Pid;
$this-Pname=$Pname;
$this-Page=$Page;
$this-Pbirthday=$Pbirthday;
echo “創建了一個對象”.”br”;
}
public function __set($name,$value) {
$this-$name=$value;
}
function show(){
echo (“我的姓名:$this-Pname,我的年齡:$this-Page,我的性別是:$this-Psex,我的生日是$this-Pbirthday br”); }
public function __get($name) { return $name; }
public function dining() { echo “$this-Pname 正在吃飯 br”; }
public function shuohua() { echo “$this-Pname喜歡說話 br”; }
public function gaosu() { echo “我的姓名叫做$this-Pname br”; }
public function IT() { echo $this-Pname.”的工作是IT行業 br”; }
}
class Student extends Perpon {
public function __construct()//PHP5中間的構造函數
{ echo “子類的構造函數”; }
public function IT()//PHP5中間的構造函數
{ parent::IT();
echo $this-Pname.”的工作是學生br”;
}
}
$perpon=new Perpon(‘1′,’zhangsan’,’18’,’男’,’9月23′); $perpon-show(); $perpon-dining(); $perpon-shuohua(); $perpon-gaosu(); $perpon-IT();
echo “hr”;
$student=new Student(); $student-IT();?
調不到的原因是:
private $Pname;
記住:private只能自己調用,其他是不行的,這一點你自己記住即可。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/152801.html