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