avatar

PHP -- 学习笔记

PHP学习笔记(谨此记录,以督促自己!)

一.PHP魔术变量

  • PHP向它运行的任何脚本提供了大量的预定义常量,但很多常量都是由不同的库定义的,只有在加载了这些库才会出现,或者动态加载后,或者编译时已经包括进去了.
    有八个魔术常量他们的值随着他们在代码中的位置改变而改变.

    • _LINE _ 文件中当前行号.

      <?php
      echo '这是第 " ' . __LINE__ . ' " 行';
      ?>
    • _FILE _ 文件的完整路径和文件名.如果用在被包含的文件中,则返回被包含的文件名.

    • _DIR _ 文件所在目录.如果用在被包括的文件中,则返回被包括的文件所在的目录.

    • _FUNCTION _ 函数名称, 返回该函数被定义时的名字(区分大小写).

    • _CLASS _ 类的名称.返回该类被定义时的名字.

    • _METHOD _ 类的方法名.返回改方法被定义时的名字

    • _NAMESPACE _ 当前命名空间的名称(区分大小写) .此常量是在编译时定义的

    • _TRAIT _ Trait的名字 ,自PHP5.4开始,PHP实现了代码复用的一个方法,称为traits.

      • Trait名包括其被声明的作用区域
        • 从基类继承的成员被插入的SayWorld Trait 中MyHelloWorld 方法覆盖.其行为 MyHelloWorld 类中定义的方法一致.优先顺序时当前类中的方法会覆盖trait的方法,而trait方法又覆盖了基类中的方法
<?php
class Base {
public function sayHello() {
echo 'Hello ';
}
}

trait SayWorld {
public function sayHello() {
parent::sayHello();
echo 'World!';
}
}

class MyHelloWorld extends Base {
use SayWorld;
}

$o = new MyHelloWorld();
$o->sayHello();
?>

二.PHP表单

<form action="study.php" method="post"><input type="submit" value="提交"></form>
  • 当用户填完表单并点击提交按钮时,表单的数据会被送往名为”study.php”文件

$ _GET $ _POST 和 $ _REQUEST 的区别

  • $ _GET 变量 接受所有以get方式发送的请求,以及浏览器地址栏中的 ? 之后的内容.
  • $ _POST 变量接受所有以 post 方式发送的请求
  • $ _REQUEST 支持两种方式发送过来的请求,,显示不显示要看传递方法,get会显示再url中(有字符限制) ,post不会显示再url中.可以传递人一多的数据 (只要服务器支持).

htmlspecialchars()

  • htmlspecialchars()函数把一些预定义的字符转换为HTML实体.
    • & (和) 成为 &amp ;
    • (双引号) 成为 &quot ;
    • (单引号) 成为 &#039 ;
    • < (小于) 成为 &it ;
    • >(大于) 成为 &gt ;

$ _SERVER[“PHP_SELF”] 变量

  • $ _SERVER[“PHP_SELF”] 是超级全局变量,返回当前正在执行脚本的文件名,与document root 相关.所以 $ _SERVER[“PHP_SELF”] 会发送表单数据到当前页面,而不是跳转到不同的页面.

表单验证

  • 验证名称 preg_match —进行正则表达式匹配

    • int preg_match(string $pattern, string $subject [, array $matches[,int $flags]])

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

      $name = test_input($_POST["name"]);
      if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
      $nameErr = "只允许字母和空格";
      }
  • 验证邮件

    $email = test_input($_POST["email"]);
    if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
    $emailErr = "非法邮箱格式";
    }
  • 验证url

    $website = test_input($_POST["website"]);
    if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
    $websiteErr = "非法的 URL 的地址";
    }

三.PHP高级编程

1.多维数组

一个数组的值可以是另一个数组,而另一个数组的值也可以是一个数组.这下再继续套娃下去,那就可以创建一个多维数组

<?php
$ar=array
(
"fangmingxuan"=>array
(
"方明轩","19"
),
"shaozhuqing"
);
echo 我叫.$ar['fangmingxuan'][0].",我今年 ".$ar['fangmingxuan'][1]."岁!!";
?>

以上输出结果为:

image-20201021191819010

2.PHP包含

  • PHP 中,可以在服务器执行PHP文件之前在该文件中插入一个文件的内容.
  • includerequire 语句用于在执行流中插入写在其他文件中的有用代码.

include 和require 除了处理错误的方式不同之外,在其他方面都是相同的:

  • require 生成一个致命错误(E_COMPILE_ERROE),在错误发生后脚本会停止执行.
  • include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行.

Tips:

  • require 一般放在PHP文件的最前面,程序执行前就会先导入要应用的文件;
  • include 一般放在程序的流程控制中,当程序执行时碰到才会引用,简化程序的执行流程;
  • require 引入的文件有错误时,执行会中断,并返回一个致命错误;
  • include 引入的文件有错误时,会继续执行,并返回一个警告;

3.PHP 文件处理

  • fopen()函数用于在PHP中打开文件,此函数的第一个参数还有要打开的文件的名称,第二个参数规定打开文件方式,若fopen()函数未能打开指定的文件,则会返回 0 ( false ) .
<html>
<body>
<?php
$file=fopen("welcome.txt","r");
?>
</body>
</html>
方式 描述
r 只读。在文件的开头开始。
r+ 读/写。在文件的开头开始。
w 只写。打开并清空文件的内容;如果文件不存在,则创建新文件。
w+ 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。
a 追加。打开并向文件末尾进行写操作,如果文件不存在,则创建新文件。
a+ 读/追加。通过向文件末尾写内容,来保持文件内容。
x 只写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。
x+ 读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。
  • fclose()函数用户关闭打开的文件.
  • 检测文件末尾(EOF)
    • feof()函数检测是否已到达文件末尾(EOF).
  • fgets()逐行读取文件,在调用该函数之后,文件指针会移动到下一行。
<?php
$file = fopen("welcome.txt", "r") or exit("无法打开文件!");
// 读取文件每一行,直到文件结尾
while(!feof($file))
{
echo fgets($file). "<br>";
}
fclose($file);
?>
  • fgetc()函数用于从文件中逐字符读取文件,在调用该函数后,文件指针会移动到下一个字符.
<?php
$file=fopen("welcome.txt","r") or exit("无法打开文件!");
while (!feof($file))
{
echo fgetc($file);
}
fclose($file);
?>

Tips:

PHP对逗号分隔符文件(*.csv)的处理
<?php
$fh=fopen("a.csv","r");//这里我们只是读取数据,所以采用只读打开文件流
$arr=fgetcsv($fh);//这个函数就是读取CSV文件的函数,他把文本读入后转为数组存储在$arr中
fclose($fh);
foreach($arr as $key=>$value){echo $value;}//循环输出所有的值
?>

注意: CSV文本编码必须和HTML的编码相同,否则使用PHP写道HTML中,用户会看到乱码.也可以使用iconv转码函数进行转码.

如果打开一个文件,文件名为中文,如果系统编码和当前文件编码不一致,会导致文件找不到无法打开,解决方法是用iconv函数编码转换成一致
$fpath=iconv('UTF-8','GB2312',"a.csv");
$file=fopen($fpath,"r") or exit("无法打开文件!");
//此处省略相关操作
fclose($file);
文章作者: 别人家的小方
文章链接: http://blog.fangmingxuan.com/2020/10/php/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 方·圆--方寸之间 丨 博客
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论