1、初步了解PHP
+ php是一種運行在服務端的跨平台的腳本語言。
+ php語法:
<?php echo "welcome!"; ?>
php像javascript語言一樣可以將標簽代碼放在html中,echo是php中的輸出關鍵字
+ php中的字符串可以用單引號也可以用雙引號,字符串連接符是"."號和其他語言用"+"不同
<?php echo 'youyi'."最美"; ?>
+ 輸出多條語句
<?php
echo "歡迎同學們!";
echo "Welcome" . " to you!";
echo 1+2+3+4+5;
?>
2、變量
+ 用$標識符定義變量:$var
+ 規則:變量名必須以字母或下划線"_"開頭
變量名只能由字母、數字、以及下划線"_"組成,還可以包含漢字
變量名不能包含空格,當變量名由多個單詞組成時,可以用下划線隔開,也可以用駝峰式命名法來命名
注:php中的變量名區分大小寫
+ php中的數據類型:4種標量類型
2種復合類型
2種特殊類型
+ var_dump()方法是判斷一個變量的類型與長度,並輸出變量的數值,如果變量有值輸的是變量的值並回返數據類型.
+ 當變量值和字符串一起輸出時,用雙引號括起來.
+ 當字符串很長時,可以用Heredoc結構的形式來輸出字符串:
<?php $string1= <<<god 我有一只小毛驢,我從來也不騎。 有一天我心血來潮,騎着去趕集。 我手里拿着小皮鞭,我心里正得意。 不知怎么嘩啦啦啦啦,我摔了一身泥" god; echo $string1; ?>
定界符<<< 來表示字符串,god是自己可以隨意定義的標識符,最后用同樣的標識符來做結尾。
3、常量
+ 用define定義常量:
<?php
$p = "PII";
define("PI",3.14);
define($p,3.14);
echo PI;//3.14
echo "<br />";
echo PII;//3.14
?>
+ 系統自定義常量,可以直接拿來使用:
_FILE_:當前文件在服務器的物理位置
_LINE_:當前代碼行數
PHP_VERSION:當前解析器的版本號
PHP_OS:當前PHP版本的操作系統名稱
+ 常量取值的兩種方式:
1、直接使用常量名
2、用constant函數
<?php
$p="";
//定義圓周率的兩種取值
define("PI1",3.14);
define("PI2",3.142);
//定義值的精度
$height = "中";
//根據精度返回常量名,將常量變成了一個可變的常量
if($height == "中"){
$p = "PI1";
}else if($height == "低"){
$p = "PI2";
}
$r=1;
$area = constant($p)*$r*$r;
echo $area;
?>
+ 判斷常量是否被定義:defined函數
4、運算符
+ php中的2種賦值運算符:"="(將值拷貝一份賦值給另一個)和"&"(引用賦值,共享內存)
$a = $b;或$a = &$b
+ 比較運算符:== === != <> !=== < > <= >=
注:php中的等於==和全等===規則和JavaScript中的類似
+ 邏輯運算符:邏輯與(and、&&),邏輯或(or、||),邏輯異或(xor),邏輯非(!)
+ 字符串連接運算符:"."或".="
+ 錯誤控制運算符:@
+ 算數運算符、三元運算符和其他語言類似
5、語言結構語句
+ 遍歷數組的兩種方式:只取數字不取下標foreach(數組 as $v)
取數字和下標foreach(數組 as $r => $v)
<?php
$students = array(
'2010'=>'令狐沖',
'2011'=>'林平之',
'2012'=>'曲洋',
'2013'=>'任盈盈',
'2014'=>'向問天',
'2015'=>'任我行',
'2016'=>'沖虛',
'2017'=>'方正',
'2018'=>'岳不群',
'2019'=>'寧中則',
);//10個學生的學號和姓名,用數組存儲
//使用循環結構遍歷數組,獲取學號和姓名
foreach($students as $r => $v)
{
echo $r." ".$v;//輸出(打印)姓名
echo "<br />";
}
?>
6、數組
+ 數組分為兩種:索引數組和關聯數組
+ 數組基本操作:
<?php
//索引數組賦值3種方式
$fruit = array("蘋","梨子",'3'=>'香蕉');
$fruit[2]='柿子';
print_r($fruit);//Array ( [0] => 蘋 [1] => 梨子 [3] => 香蕉 [2] => 柿子 )
//訪問索引數組內容
echo '<br>';
print_r($fruit['0']);//蘋
//遍歷數組2種方式
for($i=0;$i<4;$i++){
echo '<br>數組第'.$i.'值是:'.$fruit[$i];
}
foreach($fruit as $k=>$v){
echo '<br>第'.$k.'值是:'.$v;
}
//關聯數組,關聯數組和索引數組的基本操作一樣
$fruit2 = array(
'apple' => "蘋果",
'banana' => "香蕉",
'pineapple' => "菠蘿"
);
echo '<br>';
print_r($fruit2);
?>
7、函數
+ 自定義函數
+ 可變函數
+ 內置函數
+ 判斷函數是否存在-function_exists() (檢測類是否存在-class_exists;檢測文件是否存在-file_exists)
8、類和對象
+ php中訪問對象屬性的方法或屬性用->
+ 創建對象的方法:
<?php
class Car {
public $name = '汽車';
public function getName() {
return $this->name;
}
}
//1.通過new關鍵字來創建
$car = new Car();
echo $car->getName();
//2.通過變量來創建
$className = 'Car';
$car = new $className();
echo "<br>";
echo $car->getName();
?>
+ php中也有三種訪問控制的關鍵字:private、public、protected
//默認為公有,公有的類成員可以在任何地方被訪問,保護的類成員可以被自身、子類、父類訪問,私有的類成員只能被其定義所在的類訪問
//如果構造函數定義成了私有方法,則不允許直接實例化對象,可以通過靜態方法進行實例化
class Car {
private $speed = 0;//屬性必須定義訪問控制
public function getSpeed() {
return $this->speed;
}
protected function speedUp() {
$this->speed += 10;
}
//增加start方法,使他能夠調用受保護的方法speedUp實現加速10
public function start() {
$this->speedUp();
}
}
$car = new Car();
$car->start();
echo $car->getSpeed();//10
+ 面向對象中function被稱之為方法,面向過程中function稱為函數
+ 關鍵字static修飾的方法為靜態方法,不需要實例化,直接用::訪問(類名::方法名)
class Car {
private static $speed = 10;
//靜態方法中,$this偽變量不允許使用。可以使用self(自己的),parent(父類的),static在內部調用靜態方法與屬性
public function getSpeed() {
return self::$speed;
}
//在這里定義一個靜態方法,實現速度累加10
public static function speedUp() {
return self::$speed+=10;
}
}
$car = new Car();
Car::speedUp(); //調用靜態方法加速
echo $car->getSpeed(); //調用共有方法輸出當前的速度值
+ 構造函數和析構函數
<?php
class Car {
//增加構造函數與析構函數
function _construct() {
print "構造函數\n";
}
function _destruct() {
print "析構函數\n";
}
}
class Truck extends Car {
function _construct() {
print "子類構造函數\n";
parent::_construct();//調用父類構造函數
}
}
$car = new Truck();//會調用子類構造函數
unset($car);//銷毀對象會調用析構函數
?>
+ php中的重載
方法的重載通過__call來實現,當調用不存在的方法的時候,將會轉為參數調用__call方法,當調用不存在的靜態方法時會使用__callStatic重載。
<?php
class Car {
public $speed = 10;
//在這里使用重載實現speedDown方法
//注意call前面的橫杠是兩個下橫杠加起來的
//$name是不存在的函數名,$args是不存在的函數中的參數
public function __call($name, $args) {
if($name == 'speedUp') {
$this->speed += 10;
} else if($name == 'speedDown') {
$this->speed -= 10;
}
}
}
$car = new Car();
$car->speedDown(); //調用不存在的speedDown方法
echo $car->speed;
?>
+ php中的"=="和"==="
判斷同一個類的兩個實例中的屬性是否相等用==
判斷兩個變量是否為同一個對象的引用時用 ===
class Car {
}
$a = new Car();
$b = new Car();
if ($a == $b) echo '=='; //true
if ($a === $b) echo '==='; //false
+ 通過關鍵字clone來復制對象,它會調用__clone()方法
class Car {
public $name = 'car';
public function __clone() {
$obj = new Car();
$obj->name = $this->name;
}
}
$a = new Car();
$a->name = 'new car';
$b = clone $a;
if ($a == $b) echo '=='; //true
if ($a === $b) echo '==='; //false
+ 通過serialize()將對象序列化成字符串,unserialize()將字符串反序列化成對象
2016.9.28更新
