```php
<?php
//再php中定義一個類
//語法:
//修飾符 class 類名 {類體} 修飾符可以爲 final abstract
//定義一個Persion類
class Persion
{
//在類中直接被聲明的常量被稱爲成員常量,成員常量是一個不會被改變的常量
const SCIENTIFIC_NAME = "Home sapiens"; //常量學名 該屬性值不會改變
//在類中直接被聲明的變量被稱爲成員變量,又被稱爲成員屬性,定義成員變量需要使用修飾符來修飾 如果不需要特別的含義則使用var來修飾
var $sex; //性別
var $age;
var $money;
var $married;
function income ($money){
//這是一個函數它在類中被直接聲明瞭 ;它在類中被直接聲明又稱爲成員方法 , 成員方法和函數是不同的成員方法通常用來實現類的一個行爲
//必須和類結合使用只能通過該類及其下標來調用如果要在成員方法裏面訪問成員屬性或其他的方法則要使用爲變量$this,$this表示當前對象或對象
//本身
$this -> money += $money;
//和java中的this.name = name;
}
}
?>
<?php
//和java中的一樣在定義一個類後可以使用new運算符來獲取一個實例化對象
//然後使用->來訪問對象的成員屬性和成員方法 使用::來訪問對象的成員常量和成員常量
// include 'Persion.class.php';
$jack = new Persion ();
$jack -> income(10000);
echo "<p>jack的存款有:".$jack ->money;
// echo "<p>".SCIENTIFIC_NAME;
// echo "<p>". $jack::SCIENTIFIC_NAME_NAME;
?>
=========================================================
<?php
//構造函數是一種特殊的方法主要用來創建對象時初始化對象即爲成員變量賦初始值在創建對象的語句中與new函數一起使用
//php允許開發者在一個類類中定義一個構造方法作爲構造函數
//定義構造方法的關鍵字是 construct
//void_construct([mixed args [,.....]])//和java一樣構造方法名和類名相同
//首先就是定義一個類
class Student
{
//類體
var $gender;
var $age; //成員變量
var $name;
//定義構造方法
function __construct($gender,$age,$name){
$this -> gender = $gender;
$this -> age = $age;
$this -> name = $name;
}
// //構造方法的寫法二
// function Persion($gender,$age,$age){
// $this -> gender = $gender;
// $this -> age = $age;
// $this -> name = $name;
// /*
// * Fatal error: Redefinition of parameter $age in F:\xampp\htdocs\php\hanshu\day02.php on line 21
// * 在這裏它報了一個錯就是age重複定義了
// * */
// }
/*
* object(Student)#1 (3) {
["gender"]=>
string(3) "man"
["age"]=>
int(18)
["name"]=>
string(8) "huangtao"
}
* 這是代碼的輸出結果
* */
}
?>
<?php
//另外在其他的地方還可以引用並通過構造方法來創建對象同時初始化其中的屬性
$huangtao = new Student ("man",18,"huangtao");
echo "<pre>";//<pre>就是讓輸出的格式好看一點的東西
var_dump($huangtao);
?>
================================<?php
//在php中的析構函數
/*
* 析構函數和構造函數相反當對象結束它的生命週期如:所在地區的對象已經運行完畢了系統會自動的執行析構函數
* 析構函數往往用來執行清理善後工作如:內存的清理 和 釋放
*
* 定義構造函數的語法格式:
* void __destruct ();
* */
//例子:
class Persion{
var $id ;
var $name;
var $gender;
var $age;
var $salary;
var $address;
function Persion( $name ,$gender, $age , $salary , $address){
this ->id = $id;
this ->name = $name;
this -> gender = $gender;
this ->age = $age;
this ->salary = $salary;
this -> address = $address;
}
//使用析構函數清理內存
function __destruct(){
echo "運行結束,清理內存";
}
}
?>
<?php
$huangtao = new Persion(1,"huangtao","man",18,10000,"廣東");
echo "<br>";
var_dump($huangtao);
?>
========================================================
<?php
//析構函數2:
//先創建一個類
class Study {
var $max;
var $scient;
}
//創建析構函數釋放內存
function __destruct(){
echo "運行結束,釋放內存";
}
?>
<?php
//如果要在如果要在其他的地方調用則組函數執行完畢會執行Persion的析構函數
$jack = new Study();
?>
========================================================
<?php
//$this是一個僞變量由於在php中通常是先聲明一個類 , 然後再將其實例化爲一個對象,但是在聲明類時一般無法得知對象的名稱
//因此要在類的內部使用屬性和方法則可以使用¥來表示實例化後的具體對象
//在php中也有面向對象
//面向對象的三大特性: 封裝 , 繼承 , 和多態
//我們來了解各大關鍵字:
/*
* public 關鍵字修飾的屬性和方法都是公開的,可以在程序的任何的地方被調用子類可以繼承父類的所有公共成員
* private 關鍵字 和public相反你修飾的屬性和方法都是私有的正只能在其所屬的類的內部進行調用
* protect關鍵字修飾的屬性和方法除了子類外其他的類都不可以調用
* 面向對象的繼承性就是 extends 就是繼承的關鍵字和java一樣都有繼承性
*
* 接下來我們來深入瞭解各大關鍵字
* */
//定義一個類
class Persion{
//類體
public $name;//定義了一個公共的類你是name就是name
private $id;
//在類的內部定義一個構造函數
function __construct(){
$this -> name = "jack";//相當於是給他賦予了一個值在此處使用到了僞函數
//該函數指向的是對象自己
}
}
?>
<?php
//在其他的地方構建函數對象並對其進行訪問
$jack = new Persion();
echo "<br>";
echo $jack -> name;
// echo $jack -> id;
/*
* -----> Fatal error: Uncaught Error: Cannot access private property Persion::$id in
* F:\xampp\htdocs\php\hanshu\day05.php:38 Stack trace: #0 {main} thrown
* in F:\xampp\htdocs\php\hanshu\day05.php on line 38
* 我們可以看到報了該錯誤就是指該id變量是私有的不可以訪問
* */
?>
=========================================================
<?php
//在php中我們的protect關鍵字
//創建類
class Persion {
public $name;
private $id;
protected $salary;
//創建構造函數
// function __Persion($name , $id , $salary){
//// this -> name = $name;
// this -> id = $id ;
// this -> salary = $salary;
//
// }
//創建構造函數
function __construct(){
$this -> name = "huangtao";
$this -> id = 123;
$this ->salary = 10000;
}
}
?>
<?php
//接下來在其他的地方實例化並調用函數
$huangtao = new Persion();
echo "<br>";
echo $huangtao -> name;
$id = new Persion();
echo "<br>";
echo $id -> id;
echo "<br>";
$salary = new Persion();
echo $salary->salary;
/*
* Fatal error: Uncaught Error: Cannot access private property Persion::$id in
* F:\xampp\htdocs\php\hanshu\day06.php:31 Stack trace: #0 {main} thrown in
* F:\xampp\htdocs\php\hanshu\day06.php on line 31
* */
//我們可以看到它報了以上的錯誤
?>
=========================================================
<?php
//在php中的protected關鍵字修飾的屬性和方法除了他的子類可以調用外其他的類都不可以調用
class Persion{
public $name;
protected $money;
function __construct(){
$this ->name = "Jack";
$this ->money = 10000;
}
}
class Man extends Persion {
//這裏定義的是一個函數但是它是在前面加了修飾的函數就是加了一個公共的修飾 public
public function numOfMoney(){
return $this -> money;
}
}
$Jack = new Man();
echo $Jack ->numOfMoney();
$Jack = new Persion();
echo $Jack->money;
/*
* 10000
Fatal error: Uncaught Error: Cannot access protected property Persion::$money in
* F:\xampp\htdocs\php\hanshu\day07.php:20 Stack trace: #0 {main} thrown in
* F:\xampp\htdocs\php\hanshu\day07.php on line 20
* 我們可以看到它的返回值只有一個就是1000也就是說它修飾的方法只有他的子類能調用
* */
?>
=========================================================
<?php
//面向對象之繼承性使用到的關鍵字是extends
//創建一個類
class Persion{
public $name;
public $gender;
public $birthday;
const MAN = 0;
const WOMAN = 1;
function __construct($name,$birthday){
$this->name = $name;
$this ->birthday = $birthday;
}
}
//再創建一個Persion的子類來繼承他
class Man extends Persion{
function __construct($name,$birthday){
parent:: __construct ($name,$birthday);
$this ->gender = $this::MAN;
}
}
class Woman extends Persion{
function __construct($name,$birthday){
parent:: __construct ($name,$birthday);
$this ->gender = $this::WOMAN;
}
}
$jack = new Man ("jack","19910101");
$jack = new Woman ("Lucy","19980501");
echo "<pre>";
var_dump($jack);
var_dump($Lucy);
?>