PHP static 关键词

通常,当函数完成/执行后,会删除所有变量。不过,有时我需要不删除某个局部变量。实现这一点需要更进一步的工作。

要完成这一点,请在您首次声明变量时使用 static 关键词:

实例

<?php
function myTest() {
static $x=0;
echo $x;
$x++;
}
myTest();
myTest();
myTest();
?>

然而,每当函数被调用时,这个变量所存储的信息都是函数最后一次被调用时所包含的信息。

注释:该static变量仍然是函数的局部变量(局部函数外部无法使用改变量)。PHP中常量的声明使用define(varname
, value),被定义为常量后,全局都可以使用。

PHP var_dump() 会返回变量的数据类型和值:

$GLOBALS — 引用全局作用域中可用的全部变量

$GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。

PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。

下面的例子展示了如何使用超级全局变量 $GLOBALS:实例

<?php
$x = 75;
$y = 25;
function addition() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;
?>

/*$x , $y 如果不使用$GLOBALS['index'],则在addtion()函数中是无法使用php脚本中的$x ,$y的值,由于
z 是 $GLOBALS 数组中的变量,因此在函数之外也可以访问它。

PHP foreach 循环

foreach 循环只适用于数组,并用于遍历数组中的每个键/值对。

语法

foreach ($array as $value) {
code to be executed;
}

每进行一次循环迭代,当前数组元素的值就会被赋值给 $value 变量,并且数组指针会逐一地移动,直到到达最后一个数组元素。

下面的例子演示的循环将输出给定数组($colors)的值:

实例

<?php
$colors = array("red","green","blue","yellow");
foreach ($colors as $value) {
echo "$value <br>";
}
?>

在 PHP 中创建数组(索引,关联,多维)

在 PHP 中, array() 函数用于创建数组:

array();

在 PHP 中,有三种数组类型:

  • 索引数组 - 带有数字索引的数组
  • 关联数组 - 带有指定键的数组
  • 多维数组 - 包含一个或多个数组的数组

PHP 索引数组

有两种创建索引数组的方法:

索引是自动分配的(索引从 0 开始):

$cars=array("Volvo","BMW","SAAB");

或者也可以手动分配索引:

$cars[0]="Volvo";
$cars[1]="BMW";
$cars[2]="SAAB";

遍历索引数组

如需遍历并输出索引数组的所有值,您可以使用 for 循环,就像这样:实例

<?php
$cars=array("Volvo","BMW","SAAB");
$arrlength=count($cars);
for($x=0;$x<$arrlength;$x++) {
echo $cars[$x];
echo "<br>";
}
?>

PHP 关联数组

关联数组是使用您分配给数组的指定键的数组。

有两种创建关联数组的方法:

$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");

或者:

$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";

遍历关联数组

如需遍历并输出关联数组的所有值,您可以使用 foreach 循环,就像这样:

实例

<?php
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
foreach($age as $x=>$x_value) {
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>

PHP - 多维数组

多维数组指的是包含一个或多个数组的数组。

PHP 能理解两、三、四或五级甚至更多级的多维数组。不过,超过三级深的数组对于大多数人难于管理。

注释:数组的维度指示您需要选择元素的索引数。

  • 对于二维数组,您需要两个索引来选取元素
  • 对于三维数组,您需要三个索引来选取元素

PHP - 两维数组

两维数组是数组的数组(三维数组是数组的数组的数组)。

我们能够在两维数组中存储上表中的数据,就像这样:

$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);

现在这个两维数组包含了四个数组,并且它有两个索引(下标):行和列。

如需访问 $cars 数组中的元素,我们必须使用两个索引(行和列):

实例

<?php
echo $cars[0][0].": 库存:".$cars[0][1].", 销量:".$cars[0][2].".<br>";
echo $cars[1][0].": 库存:".$cars[1][1].", 销量:".$cars[1][2].".<br>";
echo $cars[2][0].": 库存:".$cars[2][1].", 销量:".$cars[2][2].".<br>";
echo $cars[3][0].": 库存:".$cars[3][1].", 销量:".$cars[3][2].".<br>";
?>

我们也可以在 For 循环中使用另一个 For 循环,来获得 $cars 数组中的元素(我们仍需使用两个索引):

实例

<?php
for ($row = 0; $row < 4; $row++) {
echo "<p><b>Row number $row</b></p>";
echo "<ul>";
for ($col = 0; $col < 3; $col++) {
echo "<li>".$cars[$row][$col]."</li>";
}
echo "</ul>";
}
?>

在C中遍历二维数组我们一般用二重for循环,相应地,PHP中的foreach也可以嵌套使用,分析一下下面的程序你就明白了: 

PHP代码:

<?php
$arr=array(
"row1"=>array(100,200,300,400),
"row2"=>array("num"=>100,"name"=>"Liuxy","score"=>98)
); foreach ($arr as $key=>$value)
{
echo "$key=>$value";
echo "<br>";
foreach ($value as $k=>$var) echo "$k=>$var<br>";
}
?>

PHP的数组元素是可以动态增长的,这是C里面不敢想的。为数组增加一个元素很简单,同访问数组元素一样,只不过键名是新的或者为空,如 $arr[new]=3;
或 $arr[]=3,这样做的结果是PHP为数组$arr增加一个键名为new的元素其值为3,若键名为空,则以当前整型键名的最大值加1作为默认的键名分配给新的元素。PHP的这种动态增长数组有时候很方便,但也带来隐患,比如当我们企图修改已存在的元素值而写错了键名时,就变成了新增一个元素,而这样的逻辑错误,系统是不会报错的。

可以增长就可以缩减,要想删除一个数组元素,可以使用unset函数,如删除上面新增的那个元素,可以写成 unset($arr[new])。也可以使用unset函数删除整个数组结构,如unset($arr),要注意这同逐个删除全部数组元素不同,后者还保留有数组的结构。形象地说,后者是人去楼空,但楼还在,前者连楼也拆除了。有意思的是删除数组全部元素后如果新增一个元素,它的默认键名将延续之前数组的最大键名递增,要想从0开始,可以使用array_values函数重置,如$arr=array_values($arr)。


关于Html文件中插入php代码,及php文件中使用html代码的深入理解

在HTML嵌入PHP脚本”和“在PHP中嵌入HTML”是两个不同的概念
Web服务器设置中,默认是不把HTML拿去解析的.
如果在服务器中修改设置,也可以,但你觉得对每一个HTML进行解析,有必要吗?效率会很低下的。
因为在配置apache/Nginx时,php的扩展名一般配置为php或php3,只有当文件扩展名为php或php3时,才会通过php服务器端的解析,否则只当是html语言,不进行php脚本的解析,也就无法调用php的代码!APACHE在Apache的httpd.conf中加入以下语句:
AddType application/x-httpd-htm .htm
Action application/x-httpd-htm "/php5/php.exe"

在后面还可以加上别的 如果这样 

AddType application/x-httpd-php .php .html .img

那以.img为后缀的文件都会被解释器跑下的。这样做的目的可以隐藏脚本类型,但是没有太大必要。

这样就可以让php解释htm中的php代码了。
因为你的HTML内容中夹带PHP请求语句(如<?php .....?>),需要PHP引擎来语法解析,而PHP服务的默认文件后缀为.php和.php3, 但是.htm和.html后缀的文件是不会提交PHP引擎解析。

php文件中夹杂html代码却是没有问题的,因为php引擎只会解释php标签<?php ... ?>内的php代码语句,而html代码不会进行任何的处理,直接html送给浏览器。

有两种方式修改nginx配置文件可以实现。
方式一:打开你的网站的nginx配置文件,然后找到:“location ~ \.php$ {”,再把其中的\.php修改为:“\.php|\.html”,保存后重启nginx即可。
方式二:同上,打开配置文件找到:“location ~ \.php$ {”,然后把location整段复制,在下面粘帖上,再把\.php修改为\.html,保存后重启nginx即可生效。
上述两种方式的配置示例代码如下:location ~ \.php|\.html$ {
            fastcgi_pass 127.0.0.1:9000; 
            fastcgi_index index.php; 
            fastcgi_param SCRIPT_FILENAME /webs$fastcgi_script_name; 
            include fastcgi_params; }
示例代码二(添加html重复段): location ~ \.html$ { 
            fastcgi_pass 127.0.0.1:9000; 
    fastcgi_index index.php; 
    fastcgi_param SCRIPT_FILENAME /webs$fastcgi_script_name; 
    include fastcgi_params; }

PHP 日期和时间

Date() 函数返回Unix 时间戳。Unix 时间戳包含 Unix 纪元(1970 年 1 月 1 日 00:00:00 GMT)与指定时间之间的秒数。
PHP Date() 函数把时间戳格式化为更易读的日期和时间。

语法

date(format,timestamp)

参数         描述

format         必需。规定时间戳的格式。

timestamp 可选。规定时间戳。默认是当前时间和日期。

注释:时间戳是一种字符序列,它表示具体事件发生的日期和事件。
date() 函数的格式参数是必需的,它们规定如何格式化日期或时间,否则返回的是默认时间戳(秒数)。

下面列出了一些常用于日期的字符:

d - 表示月里的某天(01-31)

m - 表示月(01-12)

Y - 表示年(四位数)

l - 表示周里的某天
h - 带有首位零的 12 小时小时格式

i - 带有首位零的分钟

s - 带有首位零的秒(00 -59)

a - 小写的午前和午后(am 或 pm)

其他字符,比如 "/", "." 或 "-" 也可被插入字符中,以增加其他格式。

实例

<?php
echo "今天是 " . date("Y/m/d") . "<br>";
echo "今天是 " . date("Y.m.d") . "<br>";
echo "今天是 " . date("Y-m-d") . "<br>";
echo "今天是 " . date("l-y-m-d h:i:s a");
?>

获得时区

如果从代码返回的不是正确的时间,有可能是因为您的服务器位于其他国家或者被设置为不同时区。因此,如果您需要基于具体位置的准确时间,您可以设置要用的时区。
date_default_timezone_set("Asia/Shanghai"); // PRC 表示中国

通过 PHP mktime() 创建日期

date() 函数中可选的时间戳参数规定时间戳。如果您未规定时间戳,将使用当前日期和时间(正如上例中那样)。

mktime() 函数返回日期的 Unix 时间戳。Unix 时间戳包含 Unix 纪元(1970 年 1 月 1 日 00:00:00 GMT)与指定时间之间的秒数。

语法

mktime(hour,minute,second,month,day,year)

下面的例子使用 mktime() 函数中的一系列参数来创建日期和时间:

实例

<?php
$d=mktime(9, 12, 31, 6, 10, 2015);
echo "创建日期是 " . date("Y-m-d h:i:sa", $d);
?>

通过 PHP strtotime() 用字符串来创建日期

PHP strtotime() 函数用于把人类可读的字符串转换为 Unix 时间。

strtotime(time,now)

下面的例子通过 strtotime() 函数创建日期和时间:

实例

<?php
$d=strtotime("tomorrow");
echo date("Y-m-d h:i:sa", $d) . "<br>"; $d=strtotime("next Saturday");
echo date("Y-m-d h:i:sa", $d) . "<br>"; $d=strtotime("+3 Months");
echo date("Y-m-d h:i:sa", $d) . "<br>";
?>

下例输出下周六的日期:

<?php
$startdate = strtotime("Saturday");
$enddate = strtotime("+6 weeks",$startdate); while ($startdate < $enddate) {
echo date("M d", $startdate),"<br>";
$startdate = strtotime("+1 week", $startdate);
}
?>

下例输出七月四日之前的天数:

<?php
$d1=strtotime("December 31");
$d2=ceil(($d1-time())/60/60/24);
echo "距离十二月三十一日还有:" . $d2 ." 天。";
?>

PHP include 和 require 语句

通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前)。

include (或 require)语句会获取指定文件中存在的所有文本/代码/标记,并复制到使用 include 语句的文件中。

包含文件很有用,如果您需要在网站的多张页面上引用相同的 PHP、HTML 或文本的话。

include 和 require 语句是相同的,除了错误处理方面:

require 会生成致命错误(E_COMPILE_ERROR)并停止脚本

include 只生成警告(E_WARNING),并且脚本会继续

因此,如果您希望继续执行,并向用户输出结果,即使包含文件已丢失,那么请使用 include。否则,在框架、CMS 或者复杂的 PHP 应用程序编程中,请始终使用 require 向执行流引用关键文件。这有助于提高应用程序的安全性和完整性,在某个关键文件意外丢失的情况下。

包含文件省去了大量的工作。这意味着您可以为所有页面创建标准页头、页脚或者菜单文件。然后,在页头需要更新时,您只需更新这个页头包含文件即可。

include_once
语句在脚本执行期间包含并运行指定文件。此行为和 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次。

include_once 可以用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。

PHP打开文件目录的相对路径设置“$_SERVER[ 'DOCUMENT_ROOT' ] ”

$_SERVER[ 'DOCUMENT_ROOT' ]是web服务器的根文档目录,我们在打开文件时,一般为安全性考虑需要隐藏服务器目录的名称,因此打开的文件不能放在服务器下,也不推荐使用绝对路径(不便维护)
 $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
$fp = fopen("$DOCUMENT_ROOT/../orders/orders.txt", 'ab');
考虑到可以利用 $_SERVER['DOCUMENT_ROOT'],因此设置一个orders的目录与web服务器的根目录位于同一文件夹,然后以这样的方式操作。其中“ ../ ”表示web服务器根目录的父目录。


PHP 从基础开始 ——重要知识点笔记的更多相关文章

  1. [新手必备]Python 基础入门必学知识点笔记

    Python 作为近几年越来越流行的语言,吸引了大量的学员开始学习,为了方便新手小白在学习过程中,更加快捷方便的查漏补缺.根据网上各种乱七八糟的资料以及实验楼的 Python 基础内容整理了一份极度适 ...

  2. Python 入门必学经典知识点笔记【肯定有你不知道的】

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:实验楼 Python 作为近几年越来越流行的语言,吸引了大量的学员开始学 ...

  3. 鸟哥Linux私房菜基础学习篇学习笔记3

    鸟哥Linux私房菜基础学习篇学习笔记3 第十二章 正则表达式与文件格式化处理: 正则表达式(Regular Expression) 是通过一些特殊字符的排列,用以查找.删除.替换一行或多行文字字符: ...

  4. 鸟哥Linux私房菜基础学习篇学习笔记2

    鸟哥Linux私房菜基础学习篇学习笔记2 第九章 文件与文件系统的压缩打包: Linux下的扩展名没有什么特殊的意义,仅为了方便记忆. 压缩文件的扩展名一般为: *.tar, *.tar.gz, *. ...

  5. 鸟哥Linux私房菜基础学习篇学习笔记1

    鸟哥Linux私房菜基础学习篇学习笔记1 第三章 主导分区(MBR),当系统在开机的时候会主动去读取这个区块的内容,必须对硬盘进行分区,这样硬盘才能被有效地使用. 所谓的分区只是针对64Bytes的分 ...

  6. Java 多线程与并发【知识点笔记】

    Java 多线程与并发[知识点笔记] Java多线程与并发 先说一下线程与进程的由来: 在初期的计算机,计算机只能串行执行任务,并且需要长时间的等待用户的输入才行 到了后来,出现了批处理,可以预先将用 ...

  7. JavaScript基础第05天笔记

    JavaScript基础第05天笔记 1 - 作用域 1.1 作用域概述 通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域.作用域的使用提 ...

  8. JavaScript基础第04天笔记

    JavaScript基础第04天笔记 1 - 数组 1.1 数组的概念 数组可以把一组相关的数据一起存放,并提供方便的访问(获取)方式. 数组是指一组数据的集合,其中的每个数据被称作元素,在数组中可以 ...

  9. JavaScript基础第03天笔记

    JavaScript基础第03天笔记 1 - 循环 1.1 for循环 语法结构 for(初始化变量; 条件表达式; 操作表达式 ){ //循环体 } 名称 作用 初始化变量 通常被用于初始化一个计数 ...

随机推荐

  1. internal in C#

    说白了 被 internal 修饰的东西只能在本程序集(当前项目)内被使用. 被 protected internal 修饰的属性/方法 可以在其他项目中,被派生类使用 例如有两个项目app1和app ...

  2. springMvc + Maven 项目提示 hessian 依赖包 无法下载;

    首先 从 https://github.com/alibaba/dubbo/archive/master.zip 下载最新的 dubbo 源码包到本地某个目录, 解压出来: cmd 进入该目录: 执行 ...

  3. PHP删除数组中空值

    array_filter   函数的功能是利用回调函数来对数组进行过滤,一直都以为用回调函数才能处理, 却没有发现手册下面还有一句,如果没有回调函数,那么默认就是删除数组中值为false的项目 代码: ...

  4. Hibernate的实体规则、主键生成策略、对象状态

    一. hibernate的实体类有一定的规则,类似于mybatis的逆向工程导出的实体类.具体的规则以及原因如下: 1.持久化类需要提供无参的构造方法. 因为hibernate底层采用反射机制创建对象 ...

  5. 【Python】Flask系列-模板笔记

    Jinja2模板 Jinja2模板传参 如何渲染模板: 模板放在templates文件夹下 从flask中导入render_template函数. 在视图函数中,使用render_template函数 ...

  6. python3之成像库pillow

    python提供了python image library图像库,处理图像功能,该库提供了广泛的文件格式支持,如JPEG.PNG.GIF.等,它提供了图像档案.图像显示.图像处理等功能 PIL中所涉及 ...

  7. 常用 Git 命令清单【转】

    转自:http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 作者: 阮一峰 日期: 2015年12月 9日 我每天使用 Git ,但是 ...

  8. 破解验证码模拟登陆cnblogs

    from selenium import webdriver from selenium.webdriver import ActionChains from PIL import Image imp ...

  9. make distclean

    清空bin目录make dirclean 清空所有相关的东西,包括下载的软件包,配置文件,feeds内容等make distclean 这个命令会删除feeds目录及其下面的所有的文件,直接结果就是运 ...

  10. 关于tp5 的验证码遇到的一些问题

    问题1: 网上大部分给的安装包是: composer require topthink/think-captcha 但是会提示你下载失败说要你回复*****的原始数据啥的 那可能是因为你的安装环境版本 ...