摘要:必須被包圍于之中。如果這個文件無法被導入比如文件不存在,會拋出警告。這會避免類的多重定義錯誤。如果文件最終沒有被找到,那么就會查找當前文件夾。接口可以被擴展實現(xiàn)接口的類一個類可以實現(xiàn)多個接口起使用。
本教程使用PHP 5+。
PHP必須被包圍于 之中。
如果你的文件中只有php代碼,那么最好省略結束括號標記
// 這是單行注釋的標志 # 井號也可以,但是//更常見
/* 這是多行注釋 */
使用 "echo" 或者 "print" 來輸出信息到標準輸出
print("Hello "); // 輸出 "Hello " 并且沒有換行符 // () 對于echo和print是可選的 echo "World "; // 輸出 "World" 并且換行
每個語句必須以分號結尾
在 標簽之外的語句都被自動輸出到標準輸出
?>Hello World Again!類型與變量
變量以$開始。變量可以以字母或者下劃線開頭,后面可以跟著數(shù)字、字母和下劃線。
布爾值是大小寫無關的
$boolean = true; // 或 TRUE 或 True $boolean = false; // 或 FALSE 或 False
整型
$int1 = 12; // => 12 $int2 = -12; // => -12 $int3 = 012; // => 10 (0開頭代表八進制數(shù)) $int4 = 0x0F; // => 15 (0x開頭代表十六進制數(shù))
浮點型 (即雙精度浮點型)
$float = 1.234; $float = 1.2e3; $float = 7E-10;
算數(shù)運算
$sum = 1 + 1; // 2 $difference = 2 - 1; // 1 $product = 2 * 2; // 4 $quotient = 2 / 1; // 2
算數(shù)運算的簡寫
$number = 0; $number += 1; // $number 自增1 echo $number++; // 輸出1 (運算后自增) echo ++$number; // 輸出3 (自增后運算) $number /= $float; // 先除后賦值給 $number
字符串需要被包含在單引號之中
$sgl_quotes = "$String"; // => "$String"
如果需要在字符串中引用變量,就需要使用雙引號
$dbl_quotes = "This is a $sgl_quotes."; // => "This is a $String."
特殊字符只有在雙引號中有用
$escaped = "This contains a tab character."; $unescaped = "This just contains a slash and a t: ";
可以把變量包含在一對大括號中
$money = "I have $${number} in the bank.";
自 PHP 5.3 開始, nowdocs 可以被用作多行非計算型字符串
$nowdoc = <<<"END" Multi line string END;
而Heredocs則可以用作多行計算型字符串
$heredoc = <<字符串需要用 . 來連接
echo "This string " . "is concatenated";數(shù)組PHP 中的數(shù)組都是關聯(lián)型數(shù)組,也就是某些語言中的哈希表或字典
在所有PHP版本中均適用:
$associative = array("One" => 1, "Two" => 2, "Three" => 3);PHP 5.4 中引入了新的語法
$associative = ["One" => 1, "Two" => 2, "Three" => 3]; echo $associative["One"]; // 輸出 1聲明為列表實際上是給每個值都分配了一個整數(shù)鍵(key)
$array = ["One", "Two", "Three"]; echo $array[0]; // => "One"輸出echo("Hello World!");輸出到標準輸出,此時標準輸出就是瀏覽器中的網(wǎng)頁。
print("Hello World!"); // 和echo相同echo和print實際上也屬于這個語言本身,所以我們省略括號
echo "Hello World!"; print "Hello World!"; $paragraph = "paragraph"; echo 100; // 直接輸出標量 echo $paragraph; // 或者輸出變量如果你配置了短標簽,或者使用5.4.0及以上的版本,你就可以使用簡寫的echo語法
= $paragraph ?>
$x = 1; $y = 2; $x = $y; // $x 現(xiàn)在和 $y 的值相同 $z = &$y;上述代碼中,$z 現(xiàn)在持有 $y 的引用. 現(xiàn)在更改 $z 的值也會更改 $y 的值,反之亦然。但是改變 $y 的值不會改變 $x 的值
echo $x; // => 2 echo $z; // => 2 $y = 0; echo $x; // => 2 echo $z; // => 0邏輯$a = 0; $b = "0"; $c = "1"; $d = "1";如果assert的參數(shù)為假,就會拋出警告
下面的比較都為真,不管它們的類型是否匹配
assert($a == $b); // 相等 assert($c != $a); // 不等 assert($c <> $a); // 另一種不等的表示 assert($a < $c); assert($c > $b); assert($a <= $b); assert($c >= $d);下面的比較只有在類型相同、值相同的情況下才為真
assert($c === $d); assert($a !== $d); assert(1 === "1"); assert(1 !== "1");變量可以根據(jù)其使用來進行類型轉換
$integer = 1; echo $integer + $integer; // => 2 $string = "1"; echo $string + $string; // => 2 (字符串在此時被轉化為整數(shù)) $string = "one"; echo $string + $string; // => 0 // 輸出0,因為"one"這個字符串無法被轉換為整數(shù)類型轉換可以將一個類型視作另一種類型
$boolean = (boolean) 1; // => true $zero = 0; $boolean = (boolean) $zero; // => false還有一些專用的函數(shù)來進行類型轉換
$integer = 5; $string = strval($integer); $var = null; // 空值控制結構if (true) { print "I get printed"; } if (false) { print "I don"t"; } else { print "I get printed"; } if (false) { print "Does not get printed"; } elseif(true) { print "Does"; } $x = 0; if ($x === "0") { print "Does not print"; } elseif($x == "1") { print "Does not print"; } else { print "Does print"; }三目運算符
print (false ? "Does not get printed" : "Does");下面的語法常用于模板中:
This is displayed if the test is truthy. This is displayed otherwise.用switch來實現(xiàn)相同的邏輯
switch ($x) { case "0": print "Switch does type coercion"; break; // 在case中必須使用一個break語句, // 否則在執(zhí)行完這個語句后會直接執(zhí)行后面的語句 case "two": case "three": // 如果$variable是 "two" 或 "three",執(zhí)行這里的語句 break; default: // 其他情況 }While, do...while 和 for 循環(huán)
$i = 0; while ($i < 5) { echo $i++; }; // 輸出 "01234" $i = 0; do { echo $i++; } while ($i < 5); // 輸出 "01234" echo " "; for ($x = 0; $x < 10; $x++) { echo $x; } // 輸出 "0123456789"Foreach 循環(huán)可以遍歷數(shù)組
$wheels = ["bicycle" => 2, "car" => 4]; foreach ($wheels as $wheel_count) { echo $wheel_count; } // 輸出 "24"也可以同時遍歷鍵和值
foreach ($wheels as $vehicle => $wheel_count) { echo "A $vehicle has $wheel_count wheels"; }退出、跳過循環(huán)
$i = 0; while ($i < 5) { if ($i === 3) { break; // 退出循環(huán) } echo $i++; } // 輸出 "012" for ($i = 0; $i < 5; $i++) { if ($i === 3) { continue; // 跳過此次遍歷 } echo $i; } // 輸出 "0124"函數(shù)通過"function"定義函數(shù):
function my_function () { return "Hello"; } echo my_function(); // => "Hello"函數(shù)名需要以字母或者下劃線開頭,后面可以跟著任意的字母、下劃線、數(shù)字.
function add ($x, $y = 1) { // $y 是可選參數(shù),默認值為 1 $result = $x + $y; return $result; } echo add(4); // => 5 echo add(4, 2); // => 6$result 在函數(shù)外部不可訪問,print $result;拋出警告。
從 PHP 5.3 起我們可以定義匿名函數(shù)
$inc = function ($x) { return $x + 1; }; echo $inc(2); // => 3 function foo ($x, $y, $z) { echo "$x - $y - $z"; }函數(shù)也可以返回一個函數(shù),用 "use" 將外部的參數(shù)引入到里面。
function bar ($x, $y) { return function ($z) use ($x, $y) { foo($x, $y, $z); }; } $bar = bar("A", "B"); $bar("C"); // 輸出 "A - B - C"你也可以通過字符串調用函數(shù)
$function_name = "add"; echo $function_name(1, 2); // => 3在通過程序來決定調用哪個函數(shù)時很有用。或者,使用call_user_func(callable $callback [, $parameter [, ... ]]);。
導入被導入的php文件也必須以php開標簽開始
include "my-file.php";現(xiàn)在my-file.php就在當前作用域中可見了。如果這個文件無法被導入(比如文件不存在),會拋出警告。
include_once "my-file.php";my-file.php中的代碼在其他地方被導入了,那么就不會被再次導入。這會避免類的多重定義錯誤。
require "my-file.php"; require_once "my-file.php";和include功能相同,只不過如果不能被導入時,會拋出錯誤
my-include.php的內容:
Include和Require函數(shù)也有返回值
$value = include "my-include.php";被引入的文件是根據(jù)文件路徑或者include_path配置來查找到的。如果文件最終沒有被找到,那么就會查找當前文件夾。之后才會報錯。
類類是由class關鍵字定義的
class MyClass { const MY_CONST = "value"; // 常量 static $staticVar = "static"; // 屬性必須聲明其作用域 public $property = "public"; public $instanceProp; protected $prot = "protected"; // 當前類和子類可訪問 private $priv = "private"; // 僅當前類可訪問 // 通過 __construct 來定義構造函數(shù) public function __construct($instanceProp) { // 通過 $this 訪問當前對象 $this->instanceProp = $instanceProp; } // 方法就是類中定義的函數(shù) public function myMethod() { print "MyClass"; } final function youCannotOverrideMe() { } public static function myStaticMethod() { print "I am static"; } } echo MyClass::MY_CONST; // 輸出 "value"; echo MyClass::$staticVar; // 輸出 "static"; MyClass::myStaticMethod(); // 輸出 "I am static";通過new來新建實例
$my_class = new MyClass("An instance property");如果不傳遞參數(shù),那么括號可以省略
用 -> 來訪問成員
echo $my_class->property; // => "public" echo $my_class->instanceProp; // => "An instance property" $my_class->myMethod(); // => "MyClass"使用extends來生成子類
class MyOtherClass extends MyClass { function printProtectedProperty() { echo $this->prot; } // 方法覆蓋 function myMethod() { parent::myMethod(); print " > MyOtherClass"; } } $my_other_class = new MyOtherClass("Instance prop"); $my_other_class->printProtectedProperty(); // => 輸出 "protected" $my_other_class->myMethod(); // 輸出 "MyClass > MyOtherClass"確保類不能被擴展
final class YouCannotExtendMe { }你可以使用“魔法方法”來生成getter和setter方法
class MyMapClass { private $property; public function __get($key) { return $this->$key; } public function __set($key, $value) { $this->$key = $value; } } $x = new MyMapClass(); echo $x->property; // 會使用 __get() 方法 $x->property = "Something"; // 會使用 __set() 方法類可以是被定義成抽象類 (使用 abstract 關鍵字) 或者去實現(xiàn)接口 (使用 implements 關鍵字)。接口需要通過interface關鍵字來定義。
interface InterfaceOne { public function doSomething(); } interface InterfaceTwo { public function doSomethingElse(); }接口可以被擴展
interface InterfaceThree extends InterfaceTwo { public function doAnotherContract(); }實現(xiàn)接口的類
abstract class MyAbstractClass implements InterfaceOne { public $x = "doSomething"; } class MyConcreteClass extends MyAbstractClass implements InterfaceTwo { public function doSomething() { echo $x; } public function doSomethingElse() { echo "doSomethingElse"; } }一個類可以實現(xiàn)多個接口
class SomeOtherClass implements InterfaceOne, InterfaceTwo { public function doSomething() { echo "doSomething"; } public function doSomethingElse() { echo "doSomethingElse"; } }traitPHP 5.4.0起使用 "trait" 。
trait MyTrait { public function myTraitMethod() { print "I have MyTrait"; } } class MyTraitfulClass { use MyTrait; } $cls = new MyTraitfulClass(); $cls->myTraitMethod(); // 輸出 "I have MyTrait"命名空間命名空間必須在一個文件的開始處。
類會被默認的放在全局命名空間中,可以被一個來顯式調用
$cls = new MyClass();為一個文件設置一個命名空間
namespace MyNamespace; class MyClass { }從其他文件中
$cls = new MyNamespaceMyClass;從其他命名空間中
namespace MyOtherNamespace; use MyNamespaceMyClass; $cls = new MyClass();namespace MyOtherNamespace; use MyNamespace as SomeOtherNamespace; $cls = new SomeOtherNamespaceMyClass();更多閱讀訪問PHP 官方文檔
如果你對最佳實踐感興趣 PHP之道.
如果你很熟悉善于包管理的語言 Composer.
如要了解通用標準,請訪問PSR.
原文 Learn PHP in Y minutes
翻譯 CatTail
整理修訂 SegmentFault
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/20665.html
摘要:前言解決運動和碰撞問題后,我們?yōu)榱俗屵\動環(huán)境更加自然,需要加入一些環(huán)境因子,比如常見的重力加速度和模擬摩擦力。核心代碼如下完整示例重力加速度演示模擬摩擦力科普阻礙物體相對運動或相對運動趨勢的力叫做摩擦力。 前言 解決運動和碰撞問題后,我們?yōu)榱俗屵\動環(huán)境更加自然,需要加入一些環(huán)境因子,比如常見的重力加速度和模擬摩擦力。 閱讀本篇前請先打好前面的基礎。 本人能力有限,歡迎牛人共同討論,...
摘要:前言解決運動和碰撞問題后,我們?yōu)榱俗屵\動環(huán)境更加自然,需要加入一些環(huán)境因子,比如常見的重力加速度和模擬摩擦力。核心代碼如下完整示例重力加速度演示模擬摩擦力科普阻礙物體相對運動或相對運動趨勢的力叫做摩擦力。 前言 解決運動和碰撞問題后,我們?yōu)榱俗屵\動環(huán)境更加自然,需要加入一些環(huán)境因子,比如常見的重力加速度和模擬摩擦力。 閱讀本篇前請先打好前面的基礎。 本人能力有限,歡迎牛人共同討論,...
摘要:前言本篇主要講坐標旋轉及其應用,這是編程動畫必不可少的技術。坐標旋轉模擬場景已知一個中心點,旋轉前物體,旋轉弧度求旋轉后物體。坐標旋轉常見的應用就是處理這種情況,將不規(guī)律方向的復雜問題簡單化。 前言 本篇主要講坐標旋轉及其應用,這是編程動畫必不可少的技術。 閱讀本篇前請先打好前面的基礎。 本人能力有限,歡迎牛人共同討論,批評指正。 坐標旋轉 模擬場景:已知一個中心點(centerX...
閱讀 623·2023-04-26 02:08
閱讀 2654·2021-11-18 10:02
閱讀 3460·2021-11-11 16:55
閱讀 2341·2021-08-17 10:13
閱讀 2901·2019-08-30 15:53
閱讀 685·2019-08-30 15:44
閱讀 2545·2019-08-30 11:10
閱讀 1755·2019-08-29 16:57