PHP基礎學習筆記(一)


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更新



 
   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM