php的方向,PHP面试方向
[TOC]
## 一些案例代碼
`dd()`函數
~~~
function dd($params)
{
echo "
";
print_r($params);
echo "
";}
~~~
~~~
/**
* Created By basic
* Author: Virus
* Date: 2020/5/24
* Time: 18:02
*/
require 'func.php';
?
$str1 = 'yabadabadoo';
$str2 = 'yaba';
?
if (strpos($str1, $str2) !== false) {
echo $str1.'包含'.$str2."\n";
} else {
echo $str1.'不包含'.$str2.'\n';
}
?
$x = true and false;
var_dump($x);
?
dd($_SERVER['HTTP_USER_AGENT']);
?
echo function_exists('print');
echo false; ?// 空
?
echo "
";
?
$a = true;
echo gettype($a); ? // 輸出該變量的類型
echo is_string($a); // 先判斷是否是字符串,不是 => false ,echo false; 結果為空
?
echo "
";
?
$_1 = 12;
$_2 = 012; ?// 八進制的12
$_3 = 0x12; // 16進制的12
// 12 10 18 輸出是都會轉成十進制進行輸出
echo $_1."\t", $_2."\t", $_3;
?
echo "
";
?
/*
進制轉換
12
00010010
0 => 0
16 + 2 = 18
?
*/
?
// 字符串里面前面+時,取第一個數
echo 1 + 2 + "3 + 4 + 5"; // 6
?
echo "
";
?
dd(chr(65) == 'A'); // 1 true
?
echo ord('a'); ?// 97
?
echo "
";
?
// 如果說有一個沒有數組下標,那么它的下標就是它前面的下標中最大值+1
$arr1 = [1 => 5, 5 => 8, 22, 2 => '8', 81];
?
/**
* 上述數組結構
* Array
* (
* [1] => 5
* [5] => 8
* [6] => 22
* [2] => 8
* [7] => 81
* )
*/
?
dd($arr1);
?
echo "
";
?
echo 1 >> 0; // 001 => 1 往右移1位
echo 2 >> 1; // 010 => 001 => 1 往右移1位
echo 3 << 2; // 011 => 01100 => 1100 => 12 往左移動了2位
?
echo "
";
?
// 當心面試題中第二個表達式沒有美元符,則i永遠為0,是死循環
for ($i = 0; $i < 10; $i++) {
print $i;
}
?
echo "
";
?
function change()
{
static $i = 0;
$i++;
return $i;
}
?
print change(); // 1
print change(); // 2
?
echo "
";
?
// heredoc
$foo = 'test';
$bar = <<
$foo bar
EOT;
?
echo $bar; // test bar
?
?
$array = ['1', '1'];
foreach ($array as $k => $v) {
$v = 2; // 不會改變數組
// ? $array[$k] = 2; 會改變數組
}
?
dd($array);
~~~
## `crontab`定時任務語法
> 分 時 日 月 周 星期 執行的程序
>
> 案例: 一個備份程序`mybackup`,需要在周一到周五下午1點和晚上8點運行,命令如下:
~~~
0 13,20 * * 1,2,3,4,5 mybackup
// 或者
0 13,20 * * 1-5 mybackup
?
// 逗號是并且,-,是從什么到什么
~~~
## 字符串轉化為數組的方法
`str_split`、`explode`、`preg_split`
> 正則分割
~~~
$str ? ? = '2020-07_02';
// 正則分割
$str_arr = preg_split('/-|_/', $str);
dd($str_arr);
~~~
> `str_split`按長度分割
~~~
$str3 ? ? = '123456789';
$str3_arr = str_split($str3, 3);
dd($str3_arr);
/*
* 格式如下
Array
(
[0] => 123
[1] => 456
[2] => 789
)
*/
~~~
> `explode`按照具體的某個東西進行分割
~~~
$str4 ? ? = '1,2,3,4,5,6,7,8,9';
$str4_arr = explode(",", $str4);
dd($str4_arr);
~~~
~~~
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
)
~~~
## 字符串替換函數
`str_replace`、`preg_replace`
~~~
$str5 = 'linux is very much and php';
// php is very much and php
echo str_replace('linux', 'php', $str5);
// js is very much and js
echo preg_replace('/linux|php/', 'js', $str5);
~~~
## 字符串查找
`preg_mathc()`:正則匹配
`preg_match_all()`:正則匹配多個
`strpos()`: 第一個出現的位置
`strrpos()`:最后一個出現的位置
> 案例:將字符串`08/26/2003`替換為`2003-08-26`
~~~
$str6 ? ?= '08/26/2003';
$pattern = '/(\d+)\/(\d+)\/(\d+)/';
$rep ? ? = '$3-$1-$2';
$str6 ? ?= preg_replace($pattern, $rep, $str6);
dd($str6);
~~~
## SQL語句
案例1:從表`login`中選出`name`字段包含`admin`的前10條結果所有信息的sql語句
~~~
select * from login where name like "%admin%" limit 10;
~~~
**左連接** `left...join..on`
> 左連接是以左邊的表為主導,先輸出左邊的表的所有數據,右邊匹配輸出 ,不匹配的為`null`
**右連接** `right...join...on`
> 右連接是以右邊的表為主導,先輸出右邊的表的所有數據,左邊匹配輸出 ,不匹配的為`null`
**內連接** `inner...join...on`
> 內連接必須同時符合左右表條件的內容才會輸出,相等于普通多表查詢
**索引**
> 索引可以極大的提高表的查詢速度,是數據庫中最為重要的優化手段,索引最主要的作用就是降低掃描行數,常用索引分為三種:主鍵索引、唯一索引和普通索引
## 高效的從一個標準的`url`里取出文件的擴展名
~~~
$url ?= "http:www.lanp.com/web/index.php?id=10";
$arr2 = parse_url($url);
$arr3 = pathinfo($arr2['path']);
$ext ?= $arr2['extension'];
~~~
**$arr2**
~~~
Array
(
[scheme] => http
[path] => www.lanp.com/web/index.php
[query] => id=10
)
~~~
## 描述下大流量高并發網站的解決方案
1. 服務器負載均衡(多增加幾臺服務器同時對客戶提供網站服務)
2. `web`服務器用`nginx`替換`apache`(把其中的并發數調到最高)
3. 頁面靜態化
4. 數據緩存(`memcache,redis,tp文件緩存`)
5. 表索引
6. 數據庫實現主從復制,讀寫分離
7. 減少客戶在服務器上的連接斷開時間
8. 代碼優化
總結
以上是生活随笔為你收集整理的php的方向,PHP面试方向的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在美国一个汉堡多少钱多少美元啊
- 下一篇: qq网名个性网2016