字符串
1. 單引號聲明 和雙引號聲明的區(qū)別
- 雙引號解析變量,單引號不解析
- 在雙引號里面插入變量,變量后面如果有中文或英文字符,他會把這個字符和變量拼接起來,視為一整個變量.一定要在變量的后面接上特殊字符,例如空格分開
- 在雙引號里面插變量的時候,后面不想有空格,可以拿大括號將變量包起來
- 雙引號解析轉(zhuǎn)義字符,單引號不解析
- 單引號的效率高于雙引號,盡可能使用單引號
- 雙引號和單引號可以互插,雙引號中插入單引號,單引號中插入變量,這個變量會被解析
- 我們將定界符聲明字符串視為雙引號一樣的功能來看.
<?php
$name = 'siva';
$test = "$name 名字會出現(xiàn)嗎?";
$test2 = '$name 名字會出現(xiàn)嗎?';
$test3 = "{$name}名字會出現(xiàn)嗎?";
$test4 = "'$name'名字會出現(xiàn)嗎?";
echo $test; // siva 名字會出現(xiàn)嗎?
echo $test2; // $name 名字會出現(xiàn)嗎?
echo $test3; //siva名字會出現(xiàn)嗎?
echo $test4; //'siva'名字會出現(xiàn)嗎?
?>
2. 字界符聲明
- 在變量后面的等號后寫三個小于號(<<<)
- 在<<<后寫字符(建議英文大寫字符)
- 換行寫上你任意想寫的字符
- 寫完后,頂行,在行最開始處,寫上<<<后面的字符和分號
<?php
$test = <<< ABC
如果
<b>你有</b>
<h2>哈哈哈</h2>
ABC;
?>
3. 字符串鏈接
<?php
$a = 'hello';
$name = ' siva';
$plat = '簡書';
echo $a . $name . '!歡迎來到' . $plat // hello siva!歡迎來到簡書
?>
4. strlen()
- 返回字符串的長度
- 在utf-8下 strlen()把中文字符算成3個字節(jié),英文,空格,符號占1個;
<?php
$name = '歡迎你!';
echo strlen($name) ; //10
echo strlen('hi bye!'); // 7
?>
5. strpos()
- 在字符串內(nèi)查找一個字符或一段指定的文本.
- 若在字符串中找到匹配,該函數(shù)會返回第一個匹配的字符位置,如果未找到匹配 返回false
<?php
echo strpos( 'welcome','l'); //2
echo strpos( '我的世界','世'); //6
?>
6.常量
- 常量是單個值的標識符,在腳本中無法改變該值
- 有效的常量名以字符或者下劃線開頭(常量名稱前面沒有$符號)
- 常量名可以小寫,通常用大寫
- 常量是貫穿整個腳本,是自動全局的.
- 設置PHP常量
- 使用define()函數(shù)
- 首個參數(shù)定義常量的名稱
- 第二個參數(shù)定義常量的值
- 第三個參數(shù)可選,規(guī)定常量名是否對大小寫敏感.默認false
<?php define('STATICSTR','welcome!'); echo STATICSTR; // welcome! echo staticstr; //staticstr! define('STATICSTRS','welcome!',true); echo STATICSTRS; //welcome! echo staticstrs; // welcome! ?> - 常量默認是全局變量,可以在整個運行的腳本的任何地方使用
<?php header('Content-type:text/html;charset=utf-8'); define('STATICSTR','你好'); function test(){ echo STATICSTR; } test(); // 你好 ?>
7.字符串-- startsWith
判斷字符串是否為指定元素開頭
let str = 'https://www.qingxiaoyun.com'
if(str.startsWith('https://')){
console.log('加密地址')
}else if(str.startsWith('git://')){
console.log('git地址')
}else if(str.startsWith('svn://')){
console.log('svn地址')
}
// 加密地址
8.字符串-- endsWith
判斷字符串是否為指定元素結尾
let str = '1.txt';
if(str.endsWith('.txt')){
console.log('文本文件')
}else if(str.endsWith('.png')){
console.log('png圖片')
}
// 文本文件
9.字符串模板
let name = `siva`
let str = `歡迎您!${a}` //歡迎您!siva"
let title = '我是一個標題!'
let tmp = `
<h1>${title}</h1>
<p>我是一個副
標題</p>
`
//"
// <h1>我是一個標題!</h1>
// <p>我是一個副
// 標題</p>
//"
變量
1.可變變量
$name = 'siva';
$siva = '24';
echo $$name; // 24
2.超全局變量
定義
- PHP中的許多預定義變量都是超全局的,這意味著他們在一個腳本的全部作用域中都可用.在函數(shù)或者方法中無需執(zhí)行global
$u = $_GET['uername']; //get方法
$u2 = $_POST['username']; // post方法
// 可以獲取表單中 <input type="text" name="username" />的值
$_COOKIE //得到會話控制中cookie傳值
$_SESSION //得到會話控制中session傳值
$_FILES //得到文件上傳的結果
$_REQUEST //既能得到get傳值結果,又能得到post傳值結果
$GLOBALS
- $GLOBAL 是一個包含了全部變量的全局組合數(shù)組.變量的名字就是數(shù)組的鍵.
<?php
$x = 5;
$y = 6;
function test(){
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
test();
echo $z; //11
?>
$_REQUEST
- 當用戶點擊提交按鈕時,可以用$_REQUEST收集表單中的input字段數(shù)據(jù)
<HTML>
<body>
<form methods="post" action="<?php echo $_SERVER['PHP_SELF'];?>"
Name:<input type="text" name="name"/>
<input type="submit">
</form>
<?php
$name = $_REQUEST['name'];
echo $name;
?>
</body>
</HTML>
3.環(huán)境變量
- 環(huán)境變量主要用的是
$_SERVER和$_ENV兩個,$_ENV逐漸被廢棄 - 一些常用的環(huán)境變量
$_SERVER["REQUEST_METHOD"] //請求當前php頁面的方法
$_SERVER["REQUEST_URL"] //請求的url
$_SERVER["REQUEST_SOFTWARE"] //用的哪一種服務器
$_SERVER["REMOTE_ADDR"] //客戶的IP地址
$_SERVER["SERVER_ADDR"] //當前服務器的IP地址
$_SERVER["SCRIPT_FILENAME"] //請求文件的路徑
$_SERVER["HTTP_USER_AGENT"] //當前訪問這個網(wǎng)址的電腦和瀏覽器的情況
$_SERVER["HTTP_REFERER"] //上級來源(用戶從哪個地址進入當前網(wǎng)頁)
$_SERVER["REQUEST_TIME"] //當前的時間
4.變量引用
$test = 5;
$test2 = $test;
$test2 = 6;
echo $test2; //6
echo $test; //5
$test = 5 ;
$test2 = &$test;
$test2 = 6;
echo $test2; //6
echo $test; //6
變量前加上&符號,把變量指向同一個存值空間,也就是第二個例子里,
$test變化的話,$test2就會變化,$test2變化的話,$test也會變.
$foo = 100;
function demo(&$n){
$n = 10;
return $n + $n;
}
echo demo($foo).'<br/>'; //20
echo $foo; // 10
調(diào)用demo的時候,讓
$foo和$n指向了同一個存儲區(qū)域,$n變化的時候,$foo的值也發(fā)生變化.
數(shù)組
1.數(shù)組的長度
- count()
$name = ['siva','lara','alex'];
echo count($name); // 3
2.數(shù)組排序 sort()--升序 / rsort() --降序
- sort一般是用來排序數(shù)字索引數(shù)組的,如果關聯(lián)數(shù)組通過sort排序,則鍵值會丟失
<?php
$x = [100,3,9,k,a,A];
$y = [a => nn, b => cc , c => aa];
sort($x);sort($y);
var_dump($x); // [A,a,k,3,9,100]
var_dump($y); // [aa,cc,nn] 索引變成數(shù)字
?>
3.關聯(lián)數(shù)組排序 asort() -- 升序 / arsort() -- 降序
<?php
$y = [a => nn, b => cc , c => aa];
asort($y);
var_dump($y); // [c => aa , b => cc , a => nn]
?>
4.對鍵值排序 ksort() -- 升序 / krsort() -- 降序
<?php
$y = [b => nn, c => cc , a => aa];
ksort($y);
var_dump($y); // [a => aa , b => nn , c => cc]
?>
echo && print
1. 區(qū)別
- echo -- 可以輸出一個或多個字符串;
- print -- 只允許輸出一個字符串,返回值為1;
- echo輸出的速度比print快.echo沒有返回值.
2.echo
echo是一個語言結構,使用的時候可以加括號,也可以不加;
echo xxx;
echo(xxx);
數(shù)據(jù)類型
- Interger(整型);
- String(字符串);
- Float(浮點型);
- Boolean(布爾型);
- Array(數(shù)組);
- Object(對象);
- NULL(空值);
1.查看數(shù)據(jù)類型
- gettype() -- 可以獲得變量的類型
- var)dump() -- 可以獲得變量的類型,長度和值
$str = 'haha'; $type1 = gettype($str); //string $float = 20.2; $type2 = gettype($float); // double
2.整型(int)
- 整數(shù)規(guī)則
- 整數(shù)必須有至少一個數(shù)字
- 整數(shù)不能包含逗號或空格
- 整數(shù)不能有小數(shù)點
- 整數(shù)正負均可
- 可以用三種格式規(guī)定整數(shù):十進制,十六進制,八進制
3.字符串(String)
-
聲明字符串
- 用單引號聲明
- 用雙引號聲明
- 用字界符聲明(需要輸入非常大段的字符串時使用)
-
單引號聲明
$name = 'siva'
-
雙引號聲明
$name = "siva"
-
字界符聲明
- 在變量后面的等號寫三個小于號 <<<;
- 然后在 <<< 后面寫上字符
- 然后換行寫上任意想寫的字符
- 寫完后,頂行.在行的最開始處,寫上<<< 后面的字符和分號.
<?php $name = <<<ABC 我是 用 定界符 定義的 字符串 ABC; ?>
4.浮點型(float/double)
5.布爾型(bool -- true/false)
6.數(shù)組(Array)
$names = array('siva','lara','alex');
$otherName = ['siva','lara','alex'];
7.對象(Object)
- 在php中,必須明確的尚明對象
- 必須先聲明對象的類,之后再細說
8.NULL
- 通過變量賦值,明確的指定變量為NULL;
- 沒有聲明變量 或者聲明變量但沒有賦值
- 使用函數(shù)unset()將變量銷毀掉
<?php
$a = null;
$b;
$c = 'hh';
unset($b);
var_dump($a); // NULL
var_dump($b); // NULL
var_dump($c); // NULL
var_dump($d); // NULL
?>
9.empty()
- 變量的值如果為false或者null,返回true
10.isset()
- 可以向括號中傳入一個或者多個變量,其中只要有一個變量為null,則返回false,否則,返回true;
<?php $a = 0; $b = false; $c = null; isset($a,$b,$c); //false isset($a,$b); // true ?>$test1 = '哈哈哈'; $test2 = 20; $test3 = 0; $test4 = null; $test5 = false; $result = isset($test1,$test2,$test3,$test4,$test5); // false $result2 = isset($test1,$test2,$test3,$test5); // true
11.unset()
- 銷毀變量
11. 判斷數(shù)據(jù)類型
- is_int 判斷是否為整型
- is_bool 判斷是否為布爾
- is_float 判斷是否為浮點
- is_string 判斷是否為字符串
- is_array 判斷是否為數(shù)組
- is_object 判斷是否為對象
- is_null 判斷是否為空
- is_resource 判斷是否為資源
- is_scalar 是否為標量
- is_numeric 是否為數(shù)值類型
- is_callable 是否為函數(shù)
函數(shù)
1. 內(nèi)部函數(shù)
function outer(){
echo '我是一個函數(shù) outer';
function inner(){
echo '我是outer函數(shù)的內(nèi)部函數(shù)inner';
}
}
inner(); //這個時候inner函數(shù)還不存在.直接調(diào)用會報錯
echo '<hr/>';
outer(); //現(xiàn)在可以調(diào)用outer函數(shù),outer執(zhí)行后,inner函數(shù)就變?yōu)橐讯x的函數(shù)
echo '<hr/>';
inner(); //現(xiàn)在已經(jīng)可以調(diào)用
echo '<hr/>';
outer(); //重復調(diào)用會報錯
echo '<hr/>';
如果不調(diào)用outer函數(shù),則無法執(zhí)行innner()函數(shù)
outer函數(shù)調(diào)用兩次會報錯
2.函數(shù)作用域
- 函數(shù)定義時,后括號里面接的變量是形式上的參數(shù)(形參),與函數(shù)體外的變量沒有任何關系.僅僅是在函數(shù)內(nèi)部執(zhí)行
- 函數(shù)內(nèi)部聲明的變量也與函數(shù)外的變量沒關系
- 如果想把函數(shù)體內(nèi)的變量在函數(shù)體外用,或者想把函數(shù)體外的變量拿到函數(shù)體內(nèi)用,這個時候就要用到超全局變量.