📒PHP学习笔记

本文主要记录在学习PHP中记录的一些要点。

1、PHP global 关键字

global 关键字用于函数内访问全局变量。
在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字:

<?php
$x=5;
$y=10;
 
function myTest()
{
    global $x,$y;
    $y=$x+$y;
}
 
myTest();
echo $y; // 输出 15
?>

PHP将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。

<?php
$x=5;
$y=10;
 
function myTest()
{
    $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
} 
 
myTest();
echo $y;
?>

2、Static 作用域

当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。
要做到这一点,请在您第一次声明变量时使用 static 关键字:

<?php
function myTest()
{
    static $x=0;
    echo $x;
    $x++;
    echo PHP_EOL;    // 换行符
}
 
myTest();
myTest();
myTest();
?>

然后,每次调用该函数时,该变量将会保留着函数前一次被调用时的值。
注释:该变量仍然是函数的局部变量。

3、echo 和 print 语句

在 PHP中有两个基本的输出方式: echo 和 print。

echo 和 print 区别:
echo – 可以输出一个或多个字符串
print – 只允许输出一个字符串,返回值总为 1
提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。

echo 是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo()。
print 同样是一个语言结构,可以使用括号,也可以不使用括号: print 或 print()。

PHP EOF(heredoc)是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。

使用概述:

  • 必须后接分号,否则编译通不过。
  • EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
  • 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
  • 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
  • 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与q和qq的用法。

4、var_dump()

PHP var_dump() 函数返回变量的数据类型和值。

5、PHP NULL 值

NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。
NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别。
可以通过设置变量值为 NULL 来清空变量数据。

6、PHP 类型比较

虽然 PHP 是弱类型语言,但也需要明白变量类型及它们的意义,因为我们经常需要对 PHP 变量进行比较,包含松散和严格比较。松散比较:使用两个等号 == 比较,只比较值,不比较类型。严格比较:用三个等号 === 比较,除了比较值,也比较类型。

7、PHP 并置运算符

在 PHP 中,只有一个字符串运算符。
并置运算符 (.) 用于把两个字符串值连接起来。

8、PHP数组

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

数值数组 – 带有数字 ID 键的数组

关联数组 – 带有指定的键的数组,每个键关联一个值

多维数组 – 包含一个或多个数组的数组

PHP – 数组排序函数:

sort() – 对数组进行升序排列

rsort() – 对数组进行降序排列

asort() – 根据关联数组的值,对数组进行升序排列

ksort() – 根据关联数组的键,对数组进行升序排列

arsort() – 根据关联数组的值,对数组进行降序排列

krsort() – 根据关联数组的键,对数组进行降序排列

PHP_EOL 为换行符。

9、$_GET、$_POST 和 $_REQUEST 的区别?

$_GET 变量接受所有以 get 方式发送的请求,及浏览器地址栏中的 ? 之后的内容。

$_POST 变量接受所有以 post 方式发送的请求,例如,一个 form 以 method=post 提交,提交后 php 会处理 post 过来的全部变量。

$_REQUEST 支持两种方式发送过来的请求,即 post 和 get 它都可以接受,显示不显示要看传递方法,get 会显示在 url 中(有字符数限制),post 不会在 url 中显示,可以传递任意多的数据(只要服务器支持)。

10、什么是 $_SERVER[“PHP_SELF”] 变量?

$_SERVER[“PHP_SELF”]是超级全局变量,返回当前正在执行脚本的文件名,与 document root相关。

11、什么是 htmlspecialchars()方法?

htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。

预定义的字符是:

& (和号) 成为 &amp;
" (双引号) 成为 &quot;
' (单引号) 成为 &#039;
< (小于) 成为 &lt;
> (大于) 成为 &gt;

12、preg_match

preg_match — 进行正则表达式匹配。

语法:
int preg_match ( string $pattern , string $subject [, array $matches [, int $flags ]] )

在 subject 字符串中搜索与 pattern 给出的正则表达式相匹配的内容。如果提供了 matches ,则其会被搜索的结果所填充。$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。

13、$_GET 变量

预定义的 $_GET 变量用于收集来自 method=”get” 的表单中的值。
从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送信息的量也有限制。

14、$_POST 变量

预定义的 $_POST 变量用于收集来自 method=”post” 的表单中的值。
从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。
注释:然而,默认情况下,POST 方法的发送信息的量最大值为 8 MB(可通过设置 php.ini 文件中的 post_max_size 进行更改)

15、PHP $_REQUEST 变量

预定义的 $_REQUEST 变量包含了 $_GET、$_POST 和 $_COOKIE 的内容。
$_REQUEST 变量可用来收集通过 GET 和 POST 方法发送的表单数据。

16、include 和 require 的区别

require 一般放在 PHP 文件的最前面,程序在执行前就会先导入要引用的文件;

include 一般放在程序的流程控制中,当程序执行时碰到才会引用,简化程序的执行流程。

require 引入的文件有错误时,执行会中断,并返回一个致命错误;

include 引入的文件有错误时,会继续执行,并返回一个警告。

17、die()

die() 函数输出一条消息,并退出当前脚本。

该函数是 exit() 函数的别名。

18、MySQL排序规则

MySQL排序规则:是指对指定字符集下不同字符的比较规则。其特征有以下几点:

a. 两个不同的字符集不能有相同的排序规则

b. 两个字符集有一个默认的排序规则

c. 有一些常用的命名规则。如_ci结尾表示大小写不敏感(caseinsensitive),_cs表示大小写敏感(case sensitive),_bin表示二进制的比较(binary)。

区别:

utf8_general_ci 不区分大小写,这个你在注册用户名和邮箱的时候就要使用。

utf8_general_cs 区分大小写,如果用户名和邮箱用这个 就会造成不良后果

utf8_bin:字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容

utf8_general_ci校对速度快,但准确度稍差。

utf8_unicode_ci准确度高,但校对速度稍慢。

用一句话概况上面这段话:utf8_unicode_ci比较准确,utf8_general_ci速度比较快。通常情况下 utf8_general_ci的准确性就够我们用的了,在我看过很多程序源码后,发现它们大多数也用的是utf8_general_ci,所以新建数据 库时一般选用utf8_general_ci就可以了.

19、SQL 约束

NOT NULL – 指示某列不能存储 NULL 值。

UNIQUE – 保证某列的每行必须有唯一的值。

PRIMARY KEY – NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

FOREIGN KEY – 保证一个表中的数据匹配另一个表中的值的参照完整性。

CHECK – 保证列中的值符合指定的条件。

DEFAULT – 规定没有给列赋值时的默认值。

20、explode函数

示例:PHP根据逗号分割,将字符串转成数组

<?php
    $str = '电气鼠,蒹葭苍苍,小飞鱼,奶片';
    // 根据逗号分割,将字符串转成数组
    $array = explode(',', $str);
    echo "<pre>";var_dump($array);die;
?>

21、array_push函数

array_push() 函数向数组尾部插入一个或多个元素。

<?php
$a=array("red","green");
array_push($a,"blue","yellow");
print_r($a);
?>

22、XAMPP下php.ini的真正位置

访问http://localhost/dashboard/phpinfo.php,查看Loaded Configuration File:/Applications/XAMPP/xamppfiles/etc/php.ini

23、Allowed memory size of 134217728 bytes exhausted

导入数据库提示:Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 242178750 bytes) in

修改php.ini文件,查找到memory_limit = 128M这一行,将128M改大点。

24、MySQL server has gone away

我们使用mysql导入大文件sql时可能会报MySQL server has gone away错误,该问题是max_allowed_packet配置的默认值设置太小,只需要相应调大该项的值之后再次导入便能成功。该项的作用是限制mysql服务端接收到的包的大小,因此如果导入的文件过大则可能会超过该项设置的值从而导致导入不成功!

修改my.cnf文件,将max_allowed_packet改为150M即可,原来我的只有1M。

25、PHP方法调用 

1.本类中普通方法调用

$fundList =$this->getOnsaleFundList();

2.本类中静态方法调用

$fundList =self::getOnsaleFundList();

2.调用其他类的普通方法

$objFix = new ApiAssemble();

$objFix->setUser($obj);

3.调用其他类的静态方法

$objFix = ApiAssemble::setUser($obj);

26、PHP修改数组元素内容

foreach ($list as $key=>$itemList) 

foreach ($list as &$itemList) 

27、Mac刷新浏览器和强制刷新浏览器

command + r 普通刷新(类似于windows的F5)

command + shift + r 强制刷新(类似于windows的Ctrl+F5)

28、isset函数

isset — 检测变量是否已设置并且非 null

检测变量是否设置,并且不是 null。

如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 null 的变量,将返回 false。同时要注意的是 null 字符(”\0″)并不等同于 PHP 的 null 常量。

如果一次传入多个参数,那么 isset() 只有在全部参数都以被设置时返回 true 计算过程从左至右,中途遇到没有设置的变量时就会立即停止。

29、json_decode

接受一个 JSON 编码的字符串并且把它转换为 PHP 变量

示例:

<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));
var_dump(json_decode($json, true));

?>

object(stdClass)#1 (5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

array(5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

30、serialize

serialize — 产生一个可存储的值的表示

serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。

这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。

想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()。serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。你正 serialize() 的数组/对象中的引用也将被存储。

当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数。

未完待续…


📢原创文章📢
未经授权不得转载或转载请注明出处
本文地址: https://www.zhaoxiangguang.cn/note/php/291.html

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注