php
用mac运行php文件
lang
英[læŋ] 美[læŋ]
abbr. 语言(language)
终端运行php文件
➜ ~ git:(master) ✗ cd /Users/tianzi/Documents/php
找到一个文件夹
当然,如果你的项目中需要用到数据库,那么请安装 mariadb。那就可以了。
➜ php git:(master) ✗ php -S localhost:8000
然后,就可以在浏览器中访问了:
http://localhost:8000/1.php
bool(false)
PHP 7.1.23 Development Server started at Fri Jul 26 21:42:40 2019
➜ php git:(master) ✗ php 1.php
运行这个
bool(false)
➜ php git:(master) ✗ php gu.php
rot13:Guvf vf n grfg.
Upper:THIS IS A TEST.
Lower:this is a test.
Del1:This is a test.!!!!~~~~
Del2:<b>This is a test.</b>!!!!~~~~
Del3:<b>This is a test.</b>!!!!<h1>~~~~</h1>
rot13:Guvf vf n grfg. Upper:THIS IS A TEST. Lower:this is a test. Del1:This is a test.!!!!~~~~ Del2:This is a test.!!!!~~~~ Del3:This is a test.!!!!
~~~~
网页版处理的就是不好;
Mac配置php
方法一:内置Web Server
https://www.php.net/manual/zh/features.commandline.webserver.php
➜ ~ git:(master) ✗ jekyll server
Configuration file: none 配置文件:没有
需要build -建造
➜ ~ git:(master) ✗ sudo apachectl stop
➜ ~ git:(master) ✗ sudo launchctl unload -w 无
➜ ~ git:(master) ✗ brew install httpd 安装
➜ ~ git:(master) ✗ apachectl -v
查看版本
Server version: Apache/2.4.34 (Unix)
Server built: Feb 22 2019 20:20:11
➜ ~ git:(master) ✗ sudo launchctl unload -w
Could not find specified service
无法找到指定的服务
➜ ~ git:(master) ✗ sudo apachectl sto
➜ ~ git:(master) ✗ php -v
php版本
PHP 7.1.23 (cli) (built: Feb 22 2019 22:19:32) ( NTS )
Copyright (c) 1997-2018 The PHP Group
➜ ~ git:(master) ✗ ll 查看详细(zsh带的)
➜ php git:(master) ✗ php -S localhost:8000 然后就可以了5
PHP 7.1.23 Development Server started at Fri Jul 26 21:42:40 2019
这一步可以不做
方法二:有软件带apache
就是直接安装,Apache for mac V2.4.29 官方版
方法三:dom容器
就是一个虚拟机,配置环境而已
php伪协议
事实上是其支持的协议与封装协议
支持的种类有这12种
* file:// — 访问本地文件系统
* http:// — 访问 HTTP(s) 网址
* ftp:// — 访问 FTP(s) URLs
* php:// — 访问各个输入/输出流(I/O streams)
* zlib:// — 压缩流
* data:// — 数据(RFC 2397)
* glob:// — 查找匹配的文件路径模式
* phar:// — PHP 归档
* ssh2:// — Secure Shell 2
* rar:// — RAR
* ogg:// — 音频流
* expect:// — 处理交互式的流
code
gu.php文件
<?php
$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'string.rot13');
echo "rot13:";
fwrite($fp, "This is a test.\n");
fclose($fp);
$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'string.toupper');
echo "Upper:";
fwrite($fp, "This is a test.\n");
fclose($fp);
$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'string.tolower');
echo "Lower:";
fwrite($fp, "This is a test.\n");
fclose($fp);
$fp = fopen('php://output', 'w');
echo "Del1:";
stream_filter_append($fp, 'string.strip_tags', STREAM_FILTER_WRITE);
fwrite($fp, "<b>This is a test.</b>!!!!<h1>~~~~</h1>\n");
fclose($fp);
$fp = fopen('php://output', 'w');
echo "Del2:";
stream_filter_append($fp, 'string.strip_tags', STREAM_FILTER_WRITE, "<b>");
fwrite($fp, "<b>This is a test.</b>!!!!<h1>~~~~</h1>\n");
fclose($fp);
$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'string.strip_tags', STREAM_FILTER_WRITE, array('b','h1'));
echo "Del3:";
fwrite($fp, "<b>This is a test.</b>!!!!<h1>~~~~</h1>\n");
fclose($fp);
?>
<!--
过滤器
过滤器有很多种,有字符串过滤器、转换过滤器、压缩过滤器、加密过滤器
字符串过滤器
string.rot13
进行rot13转换
string.toupper
将字符全部大写
string.tolower
将字符全部小写
string.strip_tags
去除空字符、HTML 和 PHP 标记后的结果
着重介绍一下这个,功能类似于strip_tags()函数,若不想某些字符不被消除,后面跟上字符,可利用字符串或是数组两种方式
-->
1.php文件
//青蛙过河-php
//A11 + A12+A33 +A44
//数列占位符 —标记。
//二进制-1,穷举法 (排列组合)笛卡尔乘积
//0 1 2 3 4 5 6 8 12 100(trash)
<?php
function cross($arr){
// 输入数据基本的判断
if ( !is_array($arr) ) {
return false;
}
$length=count($arr);
if ($length<=1) {
return false;
}
// 判断第1,2位的数值情况
if ( ($arr[0]!=0) || ($arr[1]!=1) ) {
return false;
}
if ($length==2) {
return true;
}
// 长度为3时的判断
if ($length==3) {
if ( ($arr[2]==2) || ($arr[2]==3) ) {
return true;
}else{
return false;
}
}
// 保证数组元素皆为整型
for ($i=0; $i < $length; $i++) {
if ( !is_int($arr[$i]) ) {
return false;
}
}
// 子数组的最大长度
$len=$length-3;
$arr1=array_slice($arr, 2, $len);
// 子数组生成的初始方式
$markStr=str_repeat(1, $len);
// 生成初始子数组
$arr2=newArr($arr,$arr1,$markStr);
// 进行判断检测
$res=examine($arr,$arr1,$arr2,$len,$markStr);
return $res;
}
// 生成子数组
function newArr($arr,$arr1,$markStr){
$arr2=[];
for ($i=0; $i < strlen($markStr); $i++) {
if ( $markStr[$i]==1 ) {
array_push($arr2, $arr1[$i]);
}
}
// 完善数组
array_unshift($arr2,$arr[0],$arr[1]);
array_push( $arr2,end($arr) );
return $arr2;
}
function examine($arr,$arr1,$arr2,$len,$markStr,$times=1){
// 所有可能的子数组的总数量
$totalTimes=pow(2,$len);
// var_dump($arr2);
// 遍历子数组
for ($i=1; $i < count($arr2)-1 ; $i++) {
// 计算元素分别与前后元素的差值
$k1=$arr2[$i]-$arr2[$i-1];
$k2=$arr2[$i+1]-$arr2[$i];
// 进行差值判断
if ( abs($k1-$k2)>1 ) {
// 累计次数
$times++;
// 次数判断
if ($times>$totalTimes) {
return false;
}
// 子数组生成方式的数据类型转换
$markNum=toBinary($markStr);
$markNum=decbin(--$markNum);
$markStr=strval($markNum);
$markStr=str_pad('0',$len, $markStr );
// 生成新的子数组
$arr2=newArr($arr,$arr1,$markStr);
// 再次进行判断
$res=examine($arr,$arr1,$arr2,$len,$markStr,$times);
return $res;
}
}
return $arr2;
}
function toBinary($str){
$num=0;
for ($i=0; $i < strlen($str); $i++) {
if ( $str[$i]==1 ) {
$num+=pow(2,strlen($str)-1-$i);
}
}
return $num;
}
var_dump( cross([0,1,2,3,5,6,8,12,16]) );
// * 将字符串转换成二进制
// * @param type $str
// * @return type
// */
// function StrToBin($str){
// //1.列出每个字符
// $arr = preg_split('/(?<!^)(?!$)/u', $str);
// //2.unpack字符
// foreach($arr as &$v){
// $temp = unpack('H*', $v);
// $v = base_convert($temp[1], 16, 2);
// unset($temp);
// }
// return join(' ',$arr);
// }
?>
PHP基础部分笔记总结
一、插入 PHP 语言的方法:
脚本区域:
<?PHP ?> 完整模式,推荐大家使用第一种
<? ?> 需要PHP.ini 文件进行开启 open_short_tags
<% %> 需要PHP.ini 文件进行开启 asp_tages
<script language="php"></script>
语句结束符号:
; (英文状态下的分号)
<?php
echo $a=100;
?>
// {}有大括号的语句结尾不需要使用分号。
二、变 量
变量 可变的量
命名规则:
1、以$开始
2、可以用中文,但是不推荐使用,不是所有版本都支持中文。
3、数字 可以使用数字 但是不能开头。
4、特殊字符不可以使用,除了_之外 放前后都可以
5、变量的命名要有意义
6、变量是大小写敏感的
$a 和 $A 是不同的两个变量
可变变量
所谓可变变量,即把变量的值作为变量名
注意: 使用可变变量时,被用来作为变量名的变量值一定要符号变量的命名规则才能使用!
变量引用x
八种数据类型
标量
1、整型 (int)
$a=100; //10 进制整型数值
$a=0100; //8 进制整型数值
$a=0X123; //16 进制整型数值
echo $a;
2、浮点型(float)
$a=250.41; //小数
$a=2.157e3; //科学计数法 表示 2.157 乘 10 的 3 次方
var_dump($a);
3、字符串(string) 单引号赋值:
$add='老虎老鼠傻傻分不清楚';
$str='我是"一只"小\'老\'虎'.$add; echo $str;
双引号赋值:
$str="我是'一只'\n 小\t 老虎{$add}哦也"; echo $str;
定界符赋值:
$str=<<<LOVE
庭前芍药,去你的!
$add ""
''
你上\n 我下
LOVE;
var_dump($str); echo $str;
字符串赋值时使用单引号与双引号的区别:
1). 单引号不能解析变量,双引号可以解析变量。
2). 单引号不解析转义字符。双引号可以解析转义字符。 单引号可以解析 \' \\
3). 单引号中可以插入双引号,双引号中可以插入单引号,相互插入的时候,对应的引号只是单纯的字符而已。
4). 单引号使用变量需要用字符连接符. 双引号也可以用。
5). 双引号使用变量时候 用{}定界 // “${a} is a variable!”
6). 使用的时候用单引号 节省效率。定界符的功能和双引号一样。
一般情况下都用单引号。,
SQL 语句的时候用双引号,提高开发效率定界符 大文章的使用定界符 方便
SQL 语句的时候用双引号
4、布尔值
真 true 假 false
$a=FALSE;
var_dump($a);
布尔值为假的情况:
整形 0
浮点型的 0.0
空字符串 字符串'0'
布尔 false
空数组array()
没有成员属性的对象(PHP4)
资源都是真
null
复合数据类型
5、数组 array();
6、对象 object
特殊数据类型
7、资源 resource
8、null 空类型
三种为空的情况:
没有声明的变量
直接赋值为 null
被声明 但是被unset()掉
注意:空字符串和 0 都不是空类型 注意区分!! 只有以上三种情况才为空!
类型转换
强制类型转换三种
方法一: (类型)变量 这里的(类型)属于运算符 6 种转换类型
整型转换: (int) (integer)
浮点型转换:(float) (real) (double)
字符串转换:(string)
布尔型转换:(bool) (boolean)
数组转换: (array)
对象转换: (object)
方法二:3 种转换类型
intval() 强制转换为整型
strval() 强制转换为字符串
floatval() 强制转换为浮点型
字符串转化为数值(整形和浮点型)的方式,遇到第一个不是数字的字符就舍弃后面虽有的字符
(无论后面有没有数字)
方法三:settype(变量,数据类型)
数据类型的判断
1、var_dump() 函数 没有返回值 只能调试代码适用
$a=123;
$type=var_dump($a); var_dump($type);
2、gettype(变量) 可以查询所有的 8 种类型 【返回值】:代表该类型的字符串
gettype()函数返回值列表:
■ “integer”
■ “double”(由于历史原因,如果是 float 则返回“double”,而不是“float”)
■ “string”
■ “boolean”(从 PHP 4 起)
■ “array”
■ “object”
■ “resource”(从 PHP 4 起)
■ “NULL”(从 PHP 4 起)
■ “user function”(只用于 PHP 3,现已停用)
■ “unknown type”
3、is 系列的类型判断函数
$a=123;
$jg=is_float($a); var_dump($jg);
标 量:is_int() is_float() is_string() is_bool()
复合类型:is_array() is_object()
特殊类型:is_resource() is_null()
is_numeric() 是不是数值类型
is_scalar() 是不是标量
isset() unset() empty()
isset(变量) 当他的值是 null 的时候 就是假
unset(变量) 删除的是变量名和变量值之间的联系而已 不删除值。
empty(变量) 【返回值】: 为空返回布尔值true 不为空返回 false int 0 float 0.0 '' '0' false null array()。。。同布尔值 false
三、常量
什么是常量:石碑上的字
$a=100;
常量取值范围是标量!
define('LAMP','PHP 编译环境'); echo LAMP;
常量的命名
1、常量也用英文,可以用中文,但是不提倡。
2、可以用数字,不能放开头
3、特殊字符不能用,除了_
4、命名有意义
_可以在任何位置
5、常量默认大小写敏感,但是可以设置为不敏感 define(参数,参数,true)
第三个参数默认为 false(大小写敏感) 改为true 则不区分大小写
常量的修改或删除
一旦定义 不可以删除或者修改。
常量的作用范围
常量的作用范围是全局的 函数内外都可以用。
//变量不是全局的。
四、运算符
算术运算符 【 + - * / % 】(算术加、算术减、算术乘、算术除、算术取余)
字符串运算符 【 . 】 (英文状态下的点)
赋值运算符 【 += -= *= /= %= .= 】
$a+=$b 相当于 $a=$a+$b
$a-=$b 相当于 $a=$a-$b
$a*=$b 相当于 $a=$a*$b
$a/=$b 相当于 $a=$a/$b
$a%=$b 相当于 $a=$a%$b
$a.=$b 相当于 $a=$a.$b
比较运算符
逻辑运算符
逻辑与 && and 两边都为真 才是真
洗脸的例子 半边脸不算洗完 2 边全洗完才算洗完脸
逻辑或 || or 任何一个为真都为真 只有全假才是假
找钱包的例子,任何一个找到就为找到!
逻辑非 ! 真变假 假变真
逻辑异或 xor 一真一假才为真 其余都是假
位运算
其他运算符
三元运算符
【格 式】: 条件?真:假
【返回值】: 真区间或者假区间
@ 单行错误抑制符 但是这个玩意 效率太低 所以不用
@$link=mysql_connect(); //可以屏蔽链接 mysql 时候的错误提示
执行 shell 脚本 参见 shell_exec()函数
语言结构部分
一、流程控制
顺序结构解决~
分支结构
单向分支结构(真有一个真区间 if 区间) 格式 1.0 版本
if(条件表达式) PHP 语句;
条件表达式为真 执行紧随其后的第一条PHP 语句,剩下的按照顺序结构执行 不受if 条件的影响(影响范围:紧随其后的第一条 PHP 语句)
格式 2.0 版本
if(条件表达式){
php 语句;
php 语句;
php 语句;
php 语句;
...
}
条件表达式为真,执行{}中的所有PHP 语句,作用范围(if 表达式之后的{}中的所有内容)
双向分支结构格式 1.0 版本
if(条件表达式)
一个表达式; else
另外一个表达式;
if 表达式为真 执行if 区间 真区间 如果为假 执行 else 区间 假区间 作用范围 仅是
if 和 else 紧随其后的第一条语句
格式 2.0 版本
if(条件表达式){ 一个表达式; 多个表达式;
}else{
另外一个表达式; 多个表达式;
}
多向分支结构基本结构
if(条件表达式){
}elseif(条件表达式){
}elseif(条件表达式){
}else{
}
switch(变量){
case 值:
PHP 语句;
[break;] //break 语句可选,不加 break 则满足条件后继续之后后面的语句不跳出分支结构
case 值:
PHP 语句; [break;]
case 值:
PHP 语句; [break;]
...
default:
PHP 语句;
}
巢状分支结构 (双向分支的嵌套结构)
巢状分支结构 无论是在if 区间还是在else 区间异或者是 2 个空间都有 都是巢状分支! 说白了 就是 双向分支的嵌套而已。
循环结构
while()
while(条件表达式){
循环体;
}
do...while() 布尔值循环
do{
循环体;
}while(条件表达式);
先执行一遍循环体,在进行判断,根据判断结果决定是否继续执行循环
for() 计数型循环
for(初始化变量 1,初始化变量 2;给定变量范围;增量){
执行循环的语句;
}
【执行过程:】 先是初始化->判断变量范围-> 满足执行循环->执行增量->判断变量范围->满足执行循环->执行增量…
初始化变量只进行一次。 static 声明的静态变量 也值初始化一次
表达式拆解分析:
$i=1;
$num=0; for(;;){
if($i>100){
break;
}
$num+=$i;
$i++;
}
echo $num;
$i=1;
$num=1; while($i<=100){
$num*=$i;
$i++;
}
echo $num;
break 在这里 跳出循环结构 switch break 跳出分支结构
continue 继续。结束本次循环(跳出本次,不执行),继续下一次的循环.
foreach()数组遍历专用
函数
函数:定义一个功能,在全局调用实现相同效果!提高代码的重用性!
【定义函数】
function 函数名(){ 函 数 体 ; [return;]
}
【调用函数】
aaa(); //函数一旦定义,可以在页面内任何地方调用function aaa(){
echo '中午的午餐好吃吗?';
}
声明了函数,要想执行,必须调用。
函数的声明可以在调用前,也可以在调用之后 ,这与函数在内存中的存储有关。可执行代码段中。
【函数的命名规范】
1. 不能用中文 ,使用英文
2. 可以使用数组,但是不能以数字开头
3. 不可以使用特殊字符 _除外 ,并且可以在任何地方使用
4. 命名要有意义
5. 大小写不敏感 不区分大小写
6. 函数命名绝对不可以冲重复,重载
【关于 return】
return 有返回值 可以被变量接收。
如果函数没有retutrn 就表示他没有返回值,不能被变量接收。
return 本身有终止函数执行的作用,函数遇到return 就不在继续往下执行了,跳出函数!
return 如果需要使用多个 一般是 分直结构来使用有 return 待返回值的函数。
没有 return 的函数 执行过程函数。
【函数的参数问题】
1、有参数就必须传参(没有默认值)
2、有默认值的时候,调用时候可以不穿参数,如果传了实参 按照实参的值进行计算。
3、如果存在多个参数,调用函数的实参和函数的形参之间必须一一对应。
4、如果想设置一个参数必须填写,设置形参的时候不给默认值就 OK 啦。
5、形参既有有默认值的时候也有没有默认值的时候。没有默认值的放在前面,这是逻辑问题而非代码问题。
function 函数名(参数名[=默认值],参数名[=默认值],参数名[=默认值,。。。。]){ 函数体;
[return]
}
function bbb($xc){ echo $xc;
}
bbb('我是实参');
【函数的变量作用域】
局部变量
函数内部声明的变量就是局部变量 只能在函数内有效
function ccc(){
$abc='午餐吃的啥呀';
}
ccc(); echo $abc;
全局变量 方法一: global
global 声明函数内外相通的变量名为一个变量(以外部变量为准。)
有结婚就有离婚 unset() 之后 内部变量被清空 ,外部继承执行后的值。
方法二:$GLOBALS 数组的方式
方法三:引用传参 和引用变量类似
$a=100;
$b=&$a; //$b=100
$实参=100;
$形参=&$实参 //$形参=100
引用传参可以在形参处引用,也可以在实参处引用
在形参处(函数参数出)使用& 对所有调用的函数都有效。 在实参处使用,只对调用的当次有
效。
静态变量 static
函数内部声明静态变量后,所赋的值只在第一次调用函数有效,往后调用的时候变量会取上一次调用函数后的值!
PHP-WAMP 环境
最开始的名字:
PHP(Personal Home Page), 个人主页
现在的名字:
PHP is Hypertext Preprocessor, 超文本预处理器
200x 开始,互联网潮流催生了 LAMP
组合:
- L: linux
- A: Apache
- M: MySQL
- P: PHP
开发的时候,常用组合是 WAMP,其中把 LINUX 换成了 WINDOWS:
何为WAMP ?
简单的解释就是 Windows 系统 + apache +mysql(或者MariaDB) + PHP
- 安装 Windows 操作系统
- 安装 MySQL/MariaDB 数据库
- 下载并解压缩 Apache 服务器
- 下载并解压缩 PHP 语言 (x64 Thread Safe)
Apache 和 PHP 添加环境变量
提问: 为什么要添加环境变量???
把上面的 apache +mysql(或者MariaDB) + PHP 的相关位置 添加到windows的 系统环境变量的 path中
配置 php(php.ini
, 如果没有,将 php.ini-development
复制一份为 php.ini
):
## 修改
date.timezone = PRC
extension_dir = "D:/software/php7/ext"
## 如果要调试的话,下载 Xdebug.dll,然后添加:
zend_extension="d:/software/php7/php_xdebug-2.5.5-7.1-vc14-x86_64.dll"
xdebug.remote_enable = On
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
配置 Apache(etc/httpd.conf
):
# 修改
Listen 9999
ServerRoot "D:/software/Apache24"
DocumentRoot "E:/www"
DirectoryIndex index.html index.php
# 整合 php,需要添加:
PHPIniDir "d:/software/php7"
LoadModule php7_module "d:/software/php7/php7apache2_4.dll"
AddHandler application/x-httpd-php .php
AddType application/x-httpd-php .php .html
开发环境最简配置
首先,下载 php 安装包,安装并配置其环境变量。
其次,创建你的项目,比如在 =E:\www\php=,通过命令行进入这个目录:
cmd
$ e:
$ cd www\php
$ php -S localhost:9999
然后,就可以在浏览器中访问了:
localhost:9999/index.php
当然,如果你的项目中需要用到数据库,那么请安装 mariadb。那就可以了。
最后,下载 PHPStorm 开发神器。