PHP-Language

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

  1. 安装 Windows 操作系统
  2. 安装 MySQL/MariaDB 数据库
  3. 下载并解压缩 Apache 服务器
  4. 下载并解压缩 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 开发神器。

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦