使用Laravel8 PHP(一)

類別class

class.php

<?php  //class.php

echo "<head>
  <meta charset='utf-8'>
  <meta name='description' content='Free Web Tutorial'>
  <meta name='author' content='wwesbake'>
</head>
";

class Dog
{
	public $age;

	public function sayAge()
	{
		echo "我的年齡 {$this->age} 歲";
	}
}

$myDog = new Dog();
$myDog->age=1;
$myDog->sayAge();

?>

__condtruct(建構子)以及__destruct(解構子)

class Dog
{
	public $age;
	//規定建立類別一定要給年齡參數
	
	public function __construct($age)
	{
		echo "旺旺旺, 我誕生了!<br>";
		$this->age=$age;
	//前面是類別自身屬性,後方是建立物件時傳入的值
	}

	public function sayAge()
	{
		echo "我的年齡{$this->age} 歲";
	}

	public function __destruct()
	{
		echo "<br/> PHP程式執行結束 Dog Class關閉";
	}
}

$myDog = new Dog(1); //建立實體物件執行__construct()內的動作
$myDog->sayAge();
說明
public $age; 1.<--屬性

public function satAge()
{
echo "我的年齡 $this->age 歲"; 2.<--方法
} 3.使用自身的屬性要加$this關鍵字

注意
要在方法中使用自身類別的屬性,必須使用關鍵字$this來取得屬性值,只使用$age會讀不到值,必須使用$this->age。

繼承(Extends)

<?php  //extend.php

echo "<head>
  <meta charset='utf-8'>
  <meta name='description' content='Free Web Tutorial'>
  <meta name='author' content='wwesbake'>
</head>
";

class Animal
{
	public $age;

	public function sayAge()
	{
		echo "我的年齡 {$this->age} 歲";
	}
}

class Dog extends Animal
{
	//內容為空
}

class Cat extends Animal
{
	//內容為空
}

$myDog = new Dog();
$myDog->age=1;
$myDog->sayAge();
echo "<br/>--HR--<br/>";
//產生了新的物件
$myCat = new Cat();
$myCat->age=2;
$myCat->sayAge();

?>
說明
Animal 類別是 Dog、Cat的父類別,反之Dog、Cat都是Animal的子類別,可以看到子類別的內容都是為空,但Dog、Cat產生實體物件,可以設定年齡以及執行顯示年齡的方法,讓我們不用重複撰寫一樣的程式碼,父子類別它們在意義上是有關係的才使用繼承,以上我們都使用public存取權限,繼承後子類別擁有父類別的所有屬性以及方法。

封裝(Encapsulation)

<?php

echo "<head>
  <meta charset='utf-8'>
  <meta name='description' content='Free Web Tutorial'>
  <meta name='author' content='wwesbake'>
</head>
";

class Animal
{
	public     $name;    //存取權限public
	protected  $age;     //存取權限protected
	private    $weight;  //存取權限private

	public function __construct($name, $age, $weight)
	{
		$this->name = $name;
		$this->age = $age;
		$this->weight = $weight;
	}

	public function animalShowData()
	{
		echo "暱稱: {$this->name} <br>";   //正常讀取
		echo "年齡: {$this->age} <br>";    //正常讀取
		echo "體重: {$this->weight} <br>"; //正常讀取
	}
}

class Dog extends Animal
{
		public function dogShowData()
		{
			echo "暱稱: {$this->name} <br>";   //正常讀取
		  echo "年齡: {$this->age} <br>";    //正常讀取
		  echo "體重: {$this->weight} <br>"; //無法讀取
		}
}


$myDog = new Dog('多多', 3, '3kg');
//$myDog->animalShowData(); //正常顯示屬性

echo $myDog->name;   //正常讀取
echo $myDog->age;    //無法讀取
echo $myDog->weight; //無法讀取

//$myDog->dogShowData();  //無法讀取$weight變數
?>

介面(Interface)

一個類別只能繼承單一類別,但可以實作多個介面,介面用於更抽象的定義,例如狗的類別有年齡的方法,人類也有年齡的方法要實作,但計算方式可能略為不同,可以建立Age介面,在其中定義,讀取年齡的方法...如果類別有年齡的特性,可以於該類別使用Age介面,類別就要實作Age介面中定義的所有方法,也可以建立一個Foot介面定義用腳可以跑步、走路...。
//1.介面 Age 使用interface 宣告介面Age
interface Age
{
	public function getAge();
}

interface Foot
{
	public function run();
	public function walk();
}


//2.Dog 類別使用implrmrnts 實作Age介面的定義
class Dog implements Age, Foot
{
	public $age;

	public function getAge()
	{
		 return $this->age * 7 . "<br>";
	}

	public function run()
	{
		 return "我用四隻腳跑步<br>";
	}

	public function walk()
	{
		 return "我用四隻腳走路<br>";
	}
}

$dog = new Dog();
$dog->age = 1;
echo $dog->getAge(); // 7
echo $dog->run();    // 我用四隻跑步
echo $dog->walk();   // 我用四隻腳走路

注意介面中只能定義常數以及public 存取權限的抽象方法。