使用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 存取權限的抽象方法。

SQL指令語法速查手冊(十)

函數語法

彙總函數

AVG

語法
AVG <數值式>

範例
SELECT AVG(price) FROM store;

COUNT

語法
COUNT 欄位

說明
COUNT函數是用來計算指定的欄位中值有多少列的函數,COUNT會計算欄位內非NULL的列數。但是,單純的想要計算所有的列數情況下,要透過「*」指定。在指定「*」的情況下,會將NULL值的列也計算進去。
COUNT中可以指定的指令有ALL與DISTINCT兩種。沒有設定特定指令的話,預設會使用ALL。如果指定DISTNCT的話,在指定欄位中重複的值就只會被計算一次。也就是說可以用來計算多少不同的值。

範例
取得所有的列數目
SELECT COUNT(*) FROM store;

取得有幾種不同的分類
SELECT COUNT(DISTINCT class) FROM store;

MAX

語法
MAX <數值式>

說明
取得指定欄位中最大值。

範例
取得price欄位的最大值
SELECT MAX(price) FROM store;

計算各群組的最大值
SELECT class,MAX(price) FROM store GROUP BY class;

MIN

語法
MIN <數值式>

範例
SELECT MIN(price) FROM store;

SELECT class,MIN(price) FROM store GROUP BY class;

STDDEV

語法
STDDEV <數值式>

說明
STDDEV函數式用來求引數中指定的<數值式>標準差的函數。但是使用者要注意,在PostgreSQL、Oracle式回傳標準差,而MySQL則是回傳母體標準差。

範例
STDDEV函數計算標準差
SELECT STDDEV(price) FROM store;

計算各個群組的標準差
SELECT class,STDDEV(price) FROM store GROUP BY class;

SUM

語法:
SUM <數值式>

說明:
SUM函數是用來求取數值式的總和的函數,SUM會計算在引數內<數值式>中指定數值欄位的總和並回傳。在SUM中也可以指定ALL以及DISTINCT指令。指定DISTINCT的話,在指定的數值欄位中如果有相同的值情況下,只會計算第一個出現的計算對象。ALL的話則會計算所有的值。

範例:
SELECT SUM(price) FROM store;

SELECT class,SUM(price) FROM store GROUP BY class;

VARIANCE  變異數

語法:
VARINCE <數值式>
求指定數值的變異數值。

字串函數

ASCII

語法:
ASCII <字串>

說明:
ASCII函數是用來將指定文字轉為ASCII碼,並傳回ASCII碼的函數。在指定多個字串的情況下,會傳回開頭第一個ASCII碼。

範例:
SELECT name,ASCII(name) FROM store;

CHAR

語法:
CHAR <數值式>

說明:
CHAR函數是用來將引數中指定的ASCII碼轉回對應字元的函數。

範例:
SELECT CHAR(99),CHAR(100),CHAR(101);

SQL指令語法速查手冊(九)

集合運算子

UNION 運算子

語法
<SELECT敘述句> UNION <SELECT敘述句>

說明
UNION 運算子是用來求取聯集的運算子。我們可以使用這個運算子來對多個SELECT敘述句所查詢的結果作聯集處理。
如果只有指定UNION運算子的話,會傳回除去重複部分的聯集。但是若指定是ALL運算子的話,就會傳回沒有除掉重複部分的聯集。在實用上,多個SELECT敘述句由UNION運算子來連結,所以UNION運算子屬於集合運算子。

範例:
SELECT ID FROM homework UNION SELECT ID FROM student;
若加上 UNION ALL 運算子指令,會將進行運算的所有資料顯示出來。

EXCEPT 運算子

語法
<SELECT 敘述句> EXCEPT <SELECT 敘述句>

說明
EXCEPT 運算子是用來求取差集合的運算子。EXCEPT會由左邊指定的查詢果中,除去右邊指定的查詢結果中後傳回差集合。撰寫時,要在EXCEPT運算子左邊撰寫被減去的集合,在右邊撰寫減去的集合。

範例
SELECT ID FROM homework EXCEPT SELECT ID FROM student;

單項運算子

+ 單項運算子

語法
+ <數值式>

範例
SELECT price, +price FROM store;

說明
+ 單項運算子並非加法運算子,他可以用來明確表示數值為正數運算子。但是 + 單項運算子並不會進行任何處理,所以在資料處理上沒有任何意義。

– 單項運算子

語法
- <數值式>

範例
SELECT cost, -cost FROM store;

說明
- 單項運算式用來將數值符號進行反轉的運算子。- 單項運算子可以將正數變為負數,將負數變為正數。

IS (NOT) NULL運算子

語法
式 IS (NOT) NULL

範例
SELECT * FROM store WHERE ID IS NULL;

說明
IS NULL 運算子是用來確認式中的值是否為NULL運算子。NULL在資料庫上是用來表示沒有的值。
比較運算子中的等於以及不等於運算子,並沒有辦法對NULL進行比較,所以沒辦法判斷值是否為NULL。要確認是否為NULL的話,只能使用IS NULL 運算子。
本例為空值。
相反地,設定為非空的話,就會顯示所有值。
SELECT * FORM store where ID IS NOT NULL;

CASE 運算子

語法
CASE 式 WHEN 條件 THEN 輸出 ....END

範例
SELECT ID,CASE WHEN 1 THEN 'first' WHEN 2 THEN 'second' WHEN 3
THEN 'third' ELSE 'other' END FROM store;

說明
CASE 運算子主要是用來轉換值的運算子。在CASE後面指定的式中如有WHEN中指定條件的情形下,會轉換為THEN中所指定的輸出的值。這樣的組合可以重複指定。而最後透過ELSE指令,ELSE指令則是若不是WHEN中指定條件時,則會轉換為ELSE中指定的值。最後要撰寫END用以表示結束。