php基礎入門


一、序言

 由於新公司的需要,我也就從原來的asp專向了,php的學習中。希望通過自己的學習能夠盡快的熟悉了解php

二、php獨特的語法特色

 1、引號問題

在php中單引號和雙引號的作用基本相同,但是有些場合卻又是不同的

都可以用來包含要引用字符串

<meta charset="utf-8">
<?php
    $str1="xiecanyong";
    $str2='xcy';
    echo $str1;
    echo "<br />";
    echo $str2;
?>

但是單引號中的內容只被解析成為字符串,而雙引號可以在字符串中加入變量

<meta charset="utf-8">
<?php
    $age=",I am age 22";
    $str1="xiecanyong$age";
    $str2='xcy$age';
    echo $str1;
    echo "<br />";
    echo $str2;
?>

 

結果就自行運行一下,這里不解釋

2、PHP常量

PHP相比於ASP,存在一些系統封裝好的常量,這些有利於我們的使用,同時還支持我們自行封裝常量

常見的常量有:

如下一些常用的PHP系統常量:

__FILE__ 當前PHP文件名

__LINE__ 當前PHP文件中所在的行數

__FUNCTION__ 當前所執行的函數

__CLASS__ 當前所執行的類

PHP_VERSION PHP的版本

PHP_OS 當前服務器的操作系統

TRUE 同true

FALSE 同false

E_ERROR 到最近的錯誤處

E_WARNING 到最近的警告處

E_PARSE 語法有錯誤處

E_NOTICE PHP語言中有異常處

M__PI 圓周率

M__E 科學常數e

M__LOG2E 以2為底e的對數

M_LOG10E 以10為底e的對數

M_LN2 2的自然對數

M_LN10 10的自然對數

PHP系統常量的內容就介紹到這里,希望對大家有所幫助。

 舉個例子:

<meta charset="utf-8">
<?php
    echo __Line__;
?>

 

打印出來的結果是:3,表示當前是在第三行執行

在常量的使用中,我們一般是這樣使用的

1、使用define方法來定義

<meta charset="utf-8">
<?php
    //模擬圓的面積計算
    define("R", 5);
    $area=R*R*pi();
    echo $area;
?>

 

2、使用const關鍵字來定義
例如:const p=2;這樣就確定了一個常量p,值為2

3、常量的檢驗

對於一個大型項目而言,我們不知道某個參數是否為變量還是常量,如果是常量的話,那么重新賦值會發生錯誤,所以我們要通過defined方法來檢驗是否為某個參數是否為常量

 

<meta charset="utf-8">
<?php
    //$CONSTANT="2";
    define("CONSTANT","2");
if (defined('CONSTANT')) {
    echo CONSTANT;
}
?>

 

 

 

 

3、PHP字符串操作

下面以一個綜合的PHP字符串操作來講解一下

<meta charset="utf-8">
<?php
    $str = "Hello PHP";
    //獲取指定字符在字符串中的位置
    echo  strpos($str,"P")."<br>";
    //截取指定位置的字符串(從第2個字符到最后)
    $str1 = substr($str,2);
    //截取指定位置的字符串(從第2個字符開始往后截取3位)
    $str2 = substr($str,2,2);
    //以指定間距分割字符串
    $str3 = str_split($str);
    $str4 = str_split($str,2);
    print_r($str4)."<br>";
    //以指定字符分割字符串
    $str = "PHP JAVA JS HTML CSS";
    $str5 = explode(" ",$str);
    print_r($str5)."<br>";
?>

 

字符串連接符

這里的字符串連接符跟其他語言的連接符有些不同,是通過"."來起到連接的,而在PHP中.=相當於其他語言的+=

錯誤控制運算符

PHP中提供了一個錯誤控制運算符“@”,對於一些可能會在運行過程中出錯的表達式時,我們不希望出錯的時候給客戶顯示錯誤信息,這樣對用戶不友好。表達式所產生的任何錯誤信息都被存放在變量$php_errormsg中,此變量在每次出錯時都會被覆蓋,所以如果想用它的話必須盡早檢查。

<?php  
$conn = @mysql_connect("localhost","username","password");
echo "出錯了,錯誤原因是:".$php_errormsg;
?>

 

error_reporting(0); 禁止顯示PHP警告提示

更多的字符串操作詳見:http://www.jianshu.com/p/91ed5dc67977

4、可變函數

<meta charset="utf-8">
<?php
    function name(){
        echo "xcy";
    }
    $n="name";
    $n();
?>

 

原理是:首先定義個一個name方法,然后是定義一個變量內容為name,最后一句其實就是$n()=name+(),也就是相當於執行了name這個方法

5、常見的內置函數

str_replace 可以實現字符串的替換

function_exists 判斷一下函數是否存在

method_exists 可以用來檢測類的方法是否存在

class_exists類是否定義可以使用 

6、PHP面向對象

一個簡單的PHP面向對象

<meta charset="utf-8">
<?php
    //定義一個類
    class Person{
        //定義一個屬性
        public $name="liLei";
        //定義一個方法
        public function Hobby(){
            return $this->name;
        }
    }
  //實例化
$per=new Person(); $per->name='xiaoLi'; echo $per->Hobby(); ?>

 

特別注意->后面的變量不能加上"$"

一般我們常見的有public、private、protected這三個修飾符

要注意的是方法和屬性也可以被static修飾,但是被修飾的方法或者是屬性不可以使用->來調用,應該要換成::

<meta charset="utf-8">
<?php
    //定義一個類
    class Person{
        //定義一個屬性
        static $name="LiLei";
    }
    error_reporting(0);
    $per=new Person();
    $per::name;
?>

 

構造函數

在PHP中也存在構造函數,但是書寫上與asp有些不通過

<meta charset="utf-8">
<?php
    //定義一個構造類
    class Person{
        public function __construct(){
            echo "this is construct";
        }
    }
    $per=new Person();

?>

 

如果是繼承關系中,子類可以通過parent::__construct()來調用父類的構造函數

<meta charset="utf-8">
<?php
    //定義一個構造類
    class Person{
        public function __construct(){
            echo "父類構造函數\n";
        }
    }
    class LiLei extends Person{
        public function __construct(){
            parent::__construct();
            echo "子類構造函數\n";
            
        }
    }
    $per=new LiLei();

?>

在static方法中,不允許使用$this來對自身的調用,應該要寫成self,同時我們應該還要注意::這個符號后面的$是不能省略的

<meta charset="utf-8">
<?php
    //定義一個構造類
    class Person{
        public function __construct(){
            echo "父類構造函數\n";
        }
    }
    class LiLei extends Person{
        
        public function __construct(){
            parent::__construct();
            echo "子類構造函數\n";            
        }
        public static $name='LiLei';
        public static function GoodAt(){
            return self::$name;
        }
    }
    $per=new LiLei();
    echo "<br />";
    echo $per::GoodAt();
?>

_destruct(),這個方法為析構函數,但是由於PHP中存在垃圾回收機制,所以這個不常用

重載

這里的重載跟C#中方法的重載不是同一個定義,這里的重載指的是,對屬性的相關操作

class Car {
  private $ary = array();
 //創建屬性
  public function __set($key, $val) {
     $this->ary[$key] = $val;
  }
  //獲取屬性
  public function __get($key) {
      if (isset($this->ary[$key])) {
          return $this->ary[$key];
      }
      return null;
  }
  //判斷屬性是否存在
  public function __isset($key) {
      if (isset($this->ary[$key])) {
          return true;
      }
      return false;
  }
  //釋放屬性
  public function __unset($key) {
      unset($this->ary[$key]);
  }
}
$car = new Car();
$car->name = '汽車';  //name屬性動態創建並賦值
echo $car->name;

方法的重載通過 call 來實現,當調用不存在的方法的時候,將會轉為參數調用call方法,當調用不存在的靜態方法時會使用 __callStatic 重載。

class Car {
  public $speed = 0;
  public function __call($name, $args) {
      if ($name == 'speedUp') {
          $this->speed += 10;
      }
  }
}
$car = new Car();
$car->speedUp(); //調用不存在的方法會使用重載
echo $car->speed;

 

其他高級的操作詳見:http://www.jianshu.com/p/26ac93b6bf32

 


免責聲明!

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



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