小星星的php
大家好,我是小星星,最近新学的php,我迫不及待要跟大家分享了!!come on!一起来看小星星的世界
先为大家介绍php基础
首先我们来看看什么叫php:
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。
php支持的动态网站语言:
java----jsp
PHP-----php
asp---——asp
php中常见的服务器:
Apache:Apache公司旗下的服务器,用于解释php语言,端口号80
Tomcat:Apache公司旗下的另一款服务器,用于解释jsp文件,端口号8080
http协议的默认端口号是80,所以使用Apache服务器无需输入端口,可以直接
使用本地的 IP:127.0.0.1或者localhost
常见的数据库:
Mysql Oracle Access SQLServer..
Mysql是一款开源免费的数据库软件,数据库存储量上要低于Oracle,但是执行效率上要高于Oracle
PHP系统通常配合Mysql使用,但是php也支持链接几乎所有的主流浏览器
B/S和C/S:
1.B/S结构:浏览器/服务器结构,用户只需要通过浏览器即可访问的网站,绝大部分功能集中在后台服务器。
2.C/S结构:客户端服务器结构,用户需要安装软件客户端才可以使用的程序,客户端部分可以分担一定的操作功能
php的语言标记:一共四种哦
①<?php?> 这个最好哦
②<script language="php"></script>
③<? ?>
④<% %>
php中的变量:
①:php中的变量必须使用$开头!!
②:php是一种弱类型语言,变量无需声明,直接给变量赋值即可,并且可以再后续赋值过程中,随时修改变量的数据类型
③:php中可以使用连等声明多个变量,而且一定不能用,分割。
eg:$a=$b=$c=10;
PHP中的真假换算(很重要哦):
1 Boolean:true为真false为假;
2。 Integer类型,0为假,非0为真
3. 浮点型 0.0为假,非0.0为真
4.字符串类型 "" "0"为假,其余全为真
5 。Array类型,空数组为假,非空为真
6 Object类型:全为真;(只有PHP4版本中,空对象为假)
7 NULL类型 全为假。
8 Resource类型:全为真。
php中的字符串:
① '';
② "";
③<<<(定界符); $str=<<<s(定界符开始)
//定界结束符必须顶格写, 而且一行中不能有任何其他内容,包括空格;
//定界标识符可以是任何字母,只要保证开始符和结束符一致即可;
s;(定界符结束)
④三种声明方式的区别:
a:''中不能解析变量,而双引号可以解析变量。
注意:双引号中,如果解析变量,需要将变量与后面内容隔开,或者用{}包裹。
eg:"haha{$num}haha" "haha${num}haha" 两种写法均可
b: ''中不能使用转义符(除了\\和\'之外)双引号中可以使用所有转移符;
c ''中可以有双引号,双引号中可有单引号,但是不能包裹同类型引号
d 定界符所有功能,与双引号相同.(但是,定界符中还可以有双引号)
php中的数据类型转换:
1 自动类型转换,表示运算的时候,Boolean null String等类型会自动转为Integer或Float类型
Null-->0 false-->0 true-->1
String转第一个非数值字符前面的数 "123a"-->123 "a123"-->0
2 强制类型转换:根据我们的需要,强制将变量转化为其它类型。
②:使用()声明新类型强转
$新变量=(新类型)$原变量; $str=(String)1
//新类型的名称可以使用全拼。也可以使用缩写 Integer/Int Boolean/bool 是一个意思
(Integer)(int)---整形* (float)(double)(real)--浮点型
(String)--字符串* (Boolean)(bool)--布尔型
(Array)---数组
(object)--对象
②:使用settype()进行强转;
bool settype(minxed var,String NewType);
第一个参数是任何类型的变量,第二个参数是字符串类型的新数据类型
返回值是Boolean类型,表示转换是否成功!
③:两种强转的区别;
第一种 是将转换之后的结果赋值给新变量;
第二种 是直接修改掉原变量的数据类型
php中判断函数数据类型的常用函数:
is_bool():判断是否是布尔型
is_int()、is_integer()和is_long():判断是否为整型。
is_float()、is_double()和is_real():判断是否为浮点型
is_string():判断是否为字符串
is_array():判断是否为数组
is_object():判断是否为对象
is_resource():判断是否为资源类型
is_null():判断是否为null
is_scalar():判断是否为标量
is_numeric():判断是否是任何类型的数字和数字字符串
is_callable():判断是否是有效的函数名
php中的运算符:
1 算术运算符
+ - * / ++ --
$a=22/"2.2a";
+:只有加减运算的功能,在进行加减运算时,如果两边有非数值类型,则会自动将非数值类型转为数值类型
2 赋值运算符 = += -= *= /= %= .=(连接字符串)
3 比较运算符
> < >= <= == === != <>(不等于) !==
==:不要求数据类型相等,只要求转换之后的结果相同;
===:要求值和数据类型必须都相等;
4逻辑运算符:
&& and || or !
&&和||:进行运算的时候会发生短路,当左侧能够判断出结果时,将直接返回结果,而不运行右侧(&& 左假即假 ||左真即真)
xor:逻辑异或 两边只有一个true,结果为TRUE,两天同为true或者同为false,结果为false
5 位运算符
将10进制的数,转为二进制,进行按位运算,运算完以后在转回10进制
&:按位与, 两个都为1 结果为1
|:按位或, 有一个1 结果为1
^:按位异或, 两个不相同时, 结果为1
(一个数异或自身,结果为0,一个数异或0,结果为其自身)
<<:左移 转为2进制后,左移几位,右边空余位补0
num<<n 相当于num *2^n
>>:右移,转为2进制后,右移几位,左边空余位补0
num>>n 相当于num/2^n(小数取整)
6 其他运算符
?:三元运算符. ?前面为true,则执行:前面的,否则执行:后面的
``:可以直接用系统命令执行中的相关指令并执行,但是,由于不同平台的的指令不一致,
以及安全性问题,这个符号我们并不支持使用,eg: 'ipconfig'
@:错误信息的控制符,可以屏蔽掉网页中出现的一些小错误信息,,但是,并不提倡使用
echo @$f //未定义 会产生Notice级别的提示,可以使用@屏蔽
php流程控制语句:
1continue:跳出本次循环继续进行下一次
2 break 跳出本层循环,继续执行循环后面的的语句,
php中,continue和break后面可以接数字表示跳过几层循环或者switch,
3 return 结束当前函数,并返回值,如果没有函数包裹,return也能终止当前脚本,但是一般不使用return终止脚本
4 exit()die():结束当前脚本,并且打印一句话
exit("再见");
基础就这么多,下面来介绍函数
函数的声明与使用:
1、标识符:程序中各变量名、属性名、方法名、函数名、类名统称为标识符
①:标识符的命名要求
只要是标识符,命名只能有字母数字下划线组成,开头不能是数字
②:标识符的命名规范:
类名:要符合“大驼峰法则”。每个单词的首字母全部大写!PersonName
其他标识符,符合“小驼峰法则”,首字母小写,之后每个单词的首字母大写 myNameIsJredu
或者“匈牙利命名法”所有字母小写,单词之间用下划线分割。my_name_is_jredu
函数名的要求:
①:函数名也是标识符之一,符合标识符的要求与规范
②:函数名不区分大小写
③:函数名与已有函数名重复,不能与系统内置函数名重复
④:bool function_exists(String funName);用于检测函数名是否存在
php中变量的作用域:
1 局部变量:声明在函数内部的变量,称为局部变量,只能在函数内部使用,如果要在外部使用,使用return关键字将函数返回
2声明在函数外面的变量称为全局变量
3 注意:php中,全剧范围不能访问局部变量,局部范围也不能访问全部变量
如果要在函数中使用全局变量,则需要使用global关键字将全局变量引入
函数中如果需要有变量与全局变量重名,global语句之上,使用局部变量,global语句之下,使用全局变量
4 GLOBALS[] 全剧数组
$GLOBALS[]数组是php中的全局数组,可以直接给数组添加键和值,无论在函数内外声明,均可以在任何地方使用;
eg:$GLOBALS['name']="jianghao";
//无论哪里声明,在任何地方均可使用$GLOBALS['name']
5 函数中需要使用局部变量使用全局变量,还有一种方式,叫做【函数传参】,可以将全局变量通过函数的参数传入,但是传进来的参数是函数的形参,也就是
函数内部的局部变量,这个变量与全局变量实际上是2个变量,内部改变,全部变量不会变;
如果需要在函数内部改变全局变量,可以将形参声明为取址形式
function func($a1,&$a2){} //函数内修改a1,全局的a1不会改变,函数内修改a2,函数的a2也会改变
注意:如果函数的形参为取址形式,则调用时必须传入变量,而不能是字面量,例如上面的函数调用, func($a1,$a2);√ func($a1,2)×
因为字面量,不能内存中的变量,无法取地址。
6 php中子函数也无法使用父函数中变量。
如果子函数要使用父函数的变量,可以将子函数作为变量函数使用, 同时配合use关键字将父函数的变量传入子函数;
function func(){
$a=10;
$func=func() use($a){
echo $a;
}
}
use关键字只能配合变量函数使用,可以将子函数作为函数的表达式使用,同时匹配合use关键字将父函数的变量传入子函数
函数中参数的传递:
在php中如果有参数的传递,实参只能比形参多,不能比形参少!!
①:常规参数传递: function func($a){} func(123);
2 引用参数传递 : function func(&$a){} func($b) ;
①:通过&传递进来的是实参的地址,所以函数内部改变形参,外部的实参也会改变
②:如果形参为引用参数,那么实参必须是变量,而不能是字面量,因为字面量没有地址!!(func10); ×
3 默认参数传递: function func($a,$b=10){} func(12);
//$b可以不传,默认为10;
注意:如果参数中有默认参数,拥有非默认参数,则需要将所有的非默认参数放在后面,所有的默认参数放在后面
4可变参数传递,由于php中实参可以比形参多,那么,传递进函数的参数可以通过php的内置函数取到相关数据
func_get_args();返回数组的格式,去到所有的实参列表
func_num_args();返回实参列表总个数,count(func_get_args());
func_get_arg(0);传入index,取到第几个参数 func_get_args()[0]
例如:
function func3($a,$b=){
$arr=func_get_args();
var_dump(func_get_args());
var_dump(func_num_args());
var_dump(func_get_args());
var_dump(count($arr));
}
func3();
变量函数:
1 将一个函数名,作为一个字符串,赋值给一个变量,这个变量,就是我们所说的变量函数,可以直接使用()调用变量函数。
function func(){}
$a="func";//$a就是变量函数
$a();
function func4(){ }
$func4=func;
$func4();
var_dump($func4);
自定义回调函数:我们用前面的知识来做一个大题
function filter($start,$end,$func){
for($i=$start;$i<=$end;$i++){
if($func($i)){
echo "{$i}<br>";
//传参,for循环
}
}
}
// filter(1,100);
filter(,,function($a){
if($a%== && $a%!=){
return true;
}else{
return false;
}
});
function func2($a,$b){ }
func2(,,,);
function func(){
$a=;
static $a=;
echo $a;
$a++;
}
func();
func();
func();
func();
func();
func();
匿名函数:
由于变量函数,存在两种调用方式,例如func() $func()
无法保证调用方法的统一,所以,变量函数通常使用匿名函数的方式进行
$func1=function(){};
!!!注意使用匿名函数表达式,最后的分号一定不能省略!
匿名函数。本身也是变量,用var_dump检测,是Object类型;
$func1=function(){};
var_dump($func1);
看看打印后返回什么:
我们来做一个练习题吧!求取10以内的数阶乘:
function func($num){
static $jie=;
//static叫做静态变量
使用static关键字声明的变量,称为静态变量,static $a=0;
静态变量的特点:
①:静态变量在函数第一次加载时进行声明;
②:静态变量在函数调用完成后,不会被释放,静态变量在整个脚本执行完成后;释放变量
③:同一个函数多次调用,共享同一个静态变量
if($num>){
$jie *= $num;
$num--;
func($num);
}
return $jie;
}
var_dump(func());
php中的数组
php中数组的分类:
按照下标的不同,php中的数组分为关联数组和索引数组
索引数组,下标为整数类型,从0开始,依次增长;
关联数组,下标为字符串类型,每个下标的字符串与数组中的值一一对应(类似对象中的键值对)
两个数组有什么区别呢!小编总结以下五条:
关于关联数组跟索引数组
①:同一个数组中,可以同时存在关联项和索引项
array(1,2"name"=>zhangsan)
②:如果数组中同时存在关联项跟索引项,则索引下标会去掉关联项后,默认增长(关联项不占索引位)
array(1,2,"name"=>zhangsan,3,4);//1,2,3,4的下标依次为0,1,2,3
arr=[];//字面量方式声明数组从php.4开始支持
③:如果关联项的key是十进制的整形,则会将此数字转为索引下标,
("10.0","08"等格式,不会转为索引下标仍然为关联数组)
$arr4=array(1,2,"name"=>"zhangsan","5"=>3,"07"=>4);//1,2,3,的下标依次为0,1,5
4依然为关联项,key为"07"
④:如果手动指定索引下标,则后续索引的增长,将从指定的最大下标开始
array(1,2,"name"=>"zhangsan","5"=>3,4);//4的下标为6
⑤:如果手动指定索引项的下标,或关联项的key与前面的已有下标混合或者key重复,则后指定的会覆盖前面指定的
array(1,"name"=>"zhangsan","0"=>3,"name"=>4);
//数组最终第0项为3,name=>4
写法:
//索引数组
$arr=[];
$arr1=array(1,2,3,4,5,6);
var_dump($arr1);
print_r($arr1);
//关联数组,用=>表示键值对的关联
让我们用几个栗子来验证以上学法是否正确:
$arr2=array("name"=>"zhangsan","age"=>,"sex"=>"男");
var_dump($arr2);
echo $arr2["name"];
$arr3=array(,,"name"=>"zhangsan",,);
var_dump($arr3);
//如果数组中同时存在关联项跟索引项,则索引下标会去掉关联项后,默认增长!!符合上述第二条 $arr4=array(,,"name"=>"zhangsan",""=>,""=>);
var_dump($arr4);
//如果关联项的key是十进制的整形,则会将此数字转为索引下标,
("10.0","08"等格式,不会转为索引下标仍然为关联数组)
所以:$arr4=array(1,2,"name"=>"zhangsan","5"=>3,"07"=>4);//1,2,3,的下标依次为0,1,5
$arr5=array(,,"name"=>"zhangsan",""=>,);
var_dump($arr5);
//如果手动指定索引下标,则后续索引的增长,将从指定的最大下标开始
array(1,2,"name"=>"zhangsan","5"=>3,4);//4的下标为6
$arr6=array(,"name"=>"zhangsan",""=>,"name"=>);
var_dump($arr6);
如果手动指定索引项的下标,或关联项的key与前面的已有下标混合或者key重复,则后指定的会覆盖前面指定的
array(1,"name"=>"zhangsan","0"=>3,"name"=>4);
//数组最终第0项为3,name=>4
数组声明的方式:
使用Array()声明:但是没有new关键字
$arr=array(1,2,3);
使用字面量[]声明,这种声明从php5.4开始支持
$arr=[1,2,3];
直接赋值声明:php中数组,可以直接使用$arr[]=n;在数组中最后追加一个值,类似push方法。
追加的值的下标,与前面的要求一样,按照下标最大值进行递增
$arr[]=;
$arr[]=;
$arr[]=;
$arr[]=;
$arr[]=;
$arr[]=;
var_dump($arr);
//数组下标的读取,php中数组下标的读取,支持使用[]和() var_dump($arr[]);
var_dump($arr[]);
$arr[]=1;
$arr[]=2;
$arr[8]=3;
$arr[]=4;
$arr[4]=5;
$arr[]=6;
var_dump($arr);
//数组下标的读取,php中数组下标的读取,支持使用[]和()
var_dump($arr[0]);
var_dump($arr[8]);
【多维数组】
如果一个数组中的值,依然为数组,那个这个数组就是多维数组
2 多维数组,并不要求每个项都是数组,嵌套一般不超过3层
$class=[
"name"=>"h51705",
"count"=>"", "grounp1"=>array("zhangsan","lisi","wangermazi"),
"grounp2"=>array("zhangsan","lisi","wangermazi"),
"grounp3"=>array("zhangsan","lisi","wangermazi"),
"grounp4"=>array("zhangsan","lisi","wangermazi"),
"grounp5"=>array("zhangsan","lisi","wangermazi") ];
var_dump($class);
便利数组:
[使用for循环便利数组]
count($arr);函数用于统计数组中的元素个数
for:循环只能用于便利索引数组,如果包含关联数组,则count()会统计两种数组的总个数,到时for循环时会出现“数组下标越界”的错误
$arr=[,,,,,"name"=>"张三"];
for($i=;$i<count($arr);$i++){
echo $arr[$i]."<br>";
}
2 foreach便利数组
foreach可以便利任何类型的数组!!
$arr1=[,,,,,"name"=>"张三"];
foreach($arr1 as $item){
echo "{$item}<br>";
}
$arr1=[,,,,,"name"=>"张三"];
foreach($arr1 as $key=>$value){
echo "{$key}=>{$value}<br>";
}
使用list()/each()/while()便利数组
list():用于将数组中的每一个值赋给list函数的每一个参数。(list函数的参数个数,不能大于数组中元素的个数)
eg: list($a,$b,$c)=$arr;
--->$a=1; $b=2; $c=3;
注意:①:list()在解析数组的时候只能解析索引数组;
②:list()可以通过索引参数选择性的解决数组的值;
list($a,$b,,$c)=[1,2,3,4];==>$c=4
$arr=[,,,];
list($a,$b,$c,$d)=$arr;
echo $a."<br>";
echo $b."<br>";
echo $c."<br>";
echo $d."<br>";
each():函数的作用
each():用于返回数组当前的指针所在的位的键值对,并将指针后移一位;
"返回值":如果指针有下一位,则返回一个数组,数组包含一对关联项
("key"--键 "value"--值)和一个索引项(0--键 1--值)
如果指针没有下一位,返回false
$arr1=["name"=>"zhangsan",,,];
// each ($arr1);
var_dump(each($arr1));
var_dump(each($arr1));
var_dump(each($arr1));
使用while循环,配合each进行便利
while($a=each($arr1)){
echo "{$a[0]}==>{$a[1]}<br>";
echo "{$a['key']}==>{$a['value']}<br>";
}
reset($arr1);//将数组指针恢复到最初位置 while(list($key,$value)=each($arr1)){
echo "{$key}==>{$value}<br>";
}
reset($arr1);
var_dump($arr1);
小星星的php的更多相关文章
- BZOJ4455: [Zjoi2016]小星星
Description 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细 线连着两颗小星星.有一天她发现,她的饰品被破坏了,很多细线都被拆掉了.这 ...
- JS对象实现随机满天小星星实例
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 【BZOJ-4455】小星星 容斥 + 树形DP
4455: [Zjoi2016]小星星 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 204 Solved: 137[Submit][Status] ...
- BZOJ 4455: [Zjoi2016]小星星 [容斥原理 树形DP]
4455: [Zjoi2016]小星星 题意:一个图删掉一些边形成一棵树,告诉你图和树的样子,求让图上的点和树上的点对应起来有多少方案 看了很多题解又想了一段时间,感觉题解都没有很深入,现在大致有了自 ...
- [ZJOI2016]小星星
题目描述 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细线连着两颗小星星. 有一天她发现,她的饰品被破坏了,很多细线都被拆掉了.这个饰品只剩下了 ...
- 4455[Zjoi2016]小星星 容斥+dp
4455: [Zjoi2016]小星星 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 527 Solved: 317[Submit][Status] ...
- [ZJOI2016]小星星&[SHOI2016]黑暗前的幻想乡(容斥)
这两道题思路比较像,所以把他们放到一块. [ZJOI2016]小星星 题目描述 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细线连着两颗小星星. ...
- UOJ #185【ZJOI2016】 小星星
题目链接:小星星 首先有个暴力很好想.令\(f_{i,j,S}\)表示把\(i\)这棵子树对应到原图中的\(S\)集合,\(i\)号点对应到了\(j\)号点的方案数.这玩意儿复杂度是\(O(3^nn^ ...
- 【BZOJ4455】小星星(动态规划,容斥)
[BZOJ4455]小星星(动态规划,容斥) 题面 BZOJ 洛谷 Uoj 题解 题意说简单点就是给定一张\(n\)个点的图和一棵\(n\)个点的树,现在要让图和树之间的点一一对应,并且如果树上存在一 ...
随机推荐
- 201521123062《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 for (int i = 0; i < list.size(); ...
- 201521123079《java程序设计》第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...
- Java课程设计——猜数游戏(201521123111 陈伟泽)
Java课程设计--猜数游戏(201521123111 陈伟泽) 1.团队课程设计博客链接 博客作业--猜数游戏 2.个人负责模块或任务说明 Answer:一些基础界面的构造,排行榜的构造,用文件录入 ...
- 201521123034 《Java程序设计》第9周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前 ...
- jvm系列:Java GC 分析
Java GC就是JVM记录仪,书画了JVM各个分区的表演. 什么是 Java GC Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之 ...
- Play使用
play框架 打包命令: play war e:/codes/cn.ngmc.frontend -o f:/backup_ngmc/20160614frontend_001Dev; 即:p ...
- JDBC第一篇--【介绍JDBC、使用JDBC连接数据库、简单的工具类】
1.什么是JDBC JDBC全称为:Java Data Base Connectivity,它是可以执行SQL语句的Java API 2.为什么我们要用JDBC 市面上有非常多的数据库,本来我们是需要 ...
- Java实现CORS跨域请求
问题 使用前后端分离模式开发项目时,往往会遇到这样一个问题 -- 无法跨域获取服务端数据 这是由于浏览器的同源策略导致的,目的是为了安全.在前后端分离开发模式备受青睐的今天,前端和后台项目往往会在不同 ...
- PuTsangTo-单撸游戏开发03 碰撞与跳跃瑕疵版
继续上一部分,游戏的定位是横版平台动作类游戏,所以得有跳跃动作,首先想到的就是物理引擎,不过在2D游戏里,仅为了角色的跳跃而引入物理引擎,目前想来有些不至于,仅使用cocos默认带有的碰撞系统也足够了 ...
- [转载]iOS开发之手势识别
感觉有必要把iOS开发中的手势识别做一个小小的总结.在上一篇iOS开发之自定义表情键盘(组件封装与自动布局)博客中用到了一个轻击手势,就是在轻击TextView时从表情键盘回到系统键盘,在TextVi ...