A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 麻同学 初级黑马   /  2019-5-31 11:52  /  754 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家好, 我是麻同学.
这是水贴!!!
题目 : 就算php不再流行, 我也依然爱它.

1.PHP
    超文本标记是用普通文本描述富文本的一种方式.
    富文本 : 有格式的文本
    PHP(Hypertext Preprocessor) 是一种被广泛应用的脚本语言, 它可以被嵌入到 HTML 中, 尤其适合做动态网站的开发.


    1.1 PHP 语言的特点
        a. 开源(open source) 软件, 跨平台, 常用操作系统稳定执行. Windows \ Linux. 做 WEB 开发的经典组合 WAMP, LAMP 基本都是开源软件.
        b. 入门简单, 用户只需要关注应用, 开发成本低.
        c. 支持的大多数主流数据库. MySQL, oracle, Redis 等
        d. 存在大量针对 PHP 开发的框架, 如 Laravel, TinkPHP, Yii, Coderlgniter, Symfony 等, 加快开发速度.

        我们使用 PHP 的目的就是能让静态网页变成动态网页, 能称之为动态网页的核心就是让 HTML 上的内容不再被写死, 而是通过在 HTML 中嵌入一段可以在服务端执行的代码(php), 从而达到动态网页的目标.

    动态修改日期
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>当前日期</title>
</head>
<body>
  <h1><?php echo date('Y-m-d'); ?></h1>
</body>
</html>


    1.2 PHP标记
        <?php    可以让代码进入 "PHP 模式"
        ?>        可以让代码退出 "PHP 模式"

    1.3 输出内容方式

        1. echo :
            输出多个字符串
<?php
// echo 是 PHP 中的一个特殊的“指令”,
// 不一定需要像函数那样通过 `()` 去使用
// 注意:echo 后面紧跟着一个空格
echo 'hello php';
echo 'hello', 'world';
// => `helloworld`


        2. print :
            输出一个字符串值
<?php
// print 与 echo 唯一区别就是只能有一个参数
print 'hello php';
// print 'hello', 'world';
// => Parse error: syntax error ...


        3. print_r :
            可以输出复杂数据类型, 如数组, 以键值对的形式输出
        4. var_dump :
             可以输出复杂数据类型, 如数组, 以键值对的形式输出, 还可以输出数据的长度
<?php
// var_dump 是一个函数,必须跟上 () 调用
// 可以将数据以及数据的类型打印为特定格式
var_dump('hello php');
// => 'string(9) "hello php"'



    1.4 与 HTML 混编

        1. 普通嵌入
<p><?php echo 'hello'; ?></p>

   
        2. 语句混编
            a. 在<?php 这个结构中只能写符合 php 语法的代码 ?>
            b. 在<?php  ?> 结构的代码会原样输出
            c. 混编实现方式
<?php if ($age >= 18) { ?>
  <p>成年人</p>
<?php } else { ?>
  <p>小朋友</p>
<?php } ?>


<?php if ($age > 18): ?>
  <p>成年人</p>
<?php else: ?>
  <p>小朋友</p>
<?php endif ?>



    1.5 注释

        1. 单行注释
<?php
// 这是一条单行注释
# 井号也可以做注释(不要用,有点生僻)
$foo = 'hello';


        2. 多行注释
<?php
/*
......
这里可以添加任意行数的注释内容
......
*/
$foo = 'hello';




    1.6 语法

        编程语言常见的语法
            a. 变量 --- 用于临时存放数据的容器
            b. 顺序结构 --- 先干什么再干什么
            c. 分支结构 --- 如果怎样就怎样否则怎样
            d. 循环结构 --- 不断的做某件相同的事
            e. 函数 --- 提前设计好一件事怎么干, 然后想什么时候干就什么时候干
            f. 运算符 --- 数学运算和字符串拼接
            g. 字面量 --- 在代码中用某些字符组成, 能够表达一个具体的值, 这些字符之间表示数据的方式叫做字面量.

        以下是重点注意的问题 :
            a. 变量
            b. 双引号字符串和单引号字符串的差异
            c. 指令式的语法
            d. foreach
            e. 函数作用域问题
            f. 字符串拼接


    1.7 变量
        变量是编程语言中临时存放数据的容器.
        PHP 中声明一个变量是用一个美元符号后面跟变量名来表示. 变量名同样是区分大小写的.
        PHP 中变量无序声明类型, 变量的类型根据值的类型来判断.
        PHP 中变量声明却没复制, 那么这个值默认为 null.
<?php
$foo; // 申明一个变量,变量名为 `foo`,未对其进行赋值
$bar = 'baz'; // 申明一个变量,将一个值为 `baz` 的字符串赋值给它
echo $foo; // 输出一个变量名为 `foo` 的变量
fn($bar); // 将一个变量名为 `foo` 的变量作为 `fn` 的实参传递





    1.8 常用函数
        
        a. isset() :
            判断变量是否定义了, 同时它还可以判断变量的值是否为 null,
            如果定义了且值不为null(不是null就行), 则返回 true, 否则返回 false.
        b. empty() :
            判断变量是否为空值, 为空的值有 : "", 0, "0", null, false, array(), 未定义的变量 ,
            如果值为以上中的某一个, 则返回值 true.
        c. unset() : 删除变量
            1. 如果删除一个变量, 那么变量的值会置为 null
            2. 可以同时删除多个变量
            3. 如果在函数中删除全局变量, 那么并不会真正的将全局变量删除(以后再说)


    1.9 数据类型
        PHP 中的 '+' 只表示运算符, 如果不能将参与运算的数据转换为数字, 就将其看成0来运算, 并且报错.
        PHP 中的连接符 用 ' . ' .

        常见的 PHP 数据类型与 JavaScript 基本一致 :
            a. string (字符串)
            b. integer (整型)    只能存整数
            c. float (浮点型)    可以存带小数位的数字
            d. boolean (布尔型)
            e. array (数组)
            f. object (对象)
            g. NULL (空)

        数据类型的分类 :
            a. 基本数据类型 : string (字符串) , integer (整型) , float (浮点型) , boolean (布尔型)
            b. 符合数据类型 : array (数组) , object (对象)
            c. 特殊数据类型 : NULL (空) , 资源

        判断数据类型 :
            a. is_string() : 判断当前变量是否是字符串类型.
            a. is_bool() : 判断当前变量是否是布尔类型.
            a. is_int() : 判断当前变量是否是整型类型.
            a. is_float() : 判断当前变量是否是浮点类型.
            a. is_array() : 判断当前变量是否是数组类型.
            a. is_object() : 判断当前变量是否是对象类型.

   
    1.10 字符串
        PHP 有多种创建字符串的方式 : 单引号, 双引号 等.

            1. 单引号字符串
                a. 不支持特殊的转义符号, 例如 \n
                b.如果要表示一个单引号字符内容, 可以通过 \' 表达
                c. 如果要表示一个反斜线字符内容, 可以通过 \\ 表达
            
            2. 双引号字符串
                a. 支持转义符号 :  \''  ,  \\  ,  \$  ,  \r , \n , \t .
                b. 支持变量解析,
                    如果在变量名后面紧接着其他的合法字符(中文, a-z A-Z 0-9 _) 那么系统会将整个变量及后面的字符串当成一个变量进行解析
                    如果需要在这种情况下正确的解析变量, 可以将变量包含在 {} 中.


    1.11 数组
        PHP 中数组大致可以分为两类 :

            1. 索引数组
                与 JavaScript 中的数组基本一致.
<?php
// 定义一个索引数组
$arr = array(1, 2, 3, 4, 5);
var_dump($arr);
print_r(arr);


// PHP 5.4 以后定义的方式可以用 `[]`
$arr2 = [1, 2, 3, 4, 5];
var_dump($arr2);
print_r(arr2);

// 在 PHP 中需要使用 count(数组对象) 来获取数组的长度
for($i = 0; $i < count($arr); $i++) {
    echo $arr[$i].' ';
}


        2. 关联数组
            有点类似于 JavaScript 中的对象
<?php
// 注意:键只能是`integer`或者`string`
$arr = array('key1' => 'value1', 'key2' => 'value2');
var_dump($arr);


// PHP 5.4 以后定义的方式可以用 `[]`
$arr2 = ['key1' => 'value1', 'key2' => 'value2'];
var_dump($arr2);

// 遍历关联数组 foreach
foreach(数组对象 as 键 => 值) {
    echo $key.":".$value.'<br>';
}
//遍历关联数组 简洁写法
foreach($arr as $key) {
    echo $key.'<br>';    // 输出数组的值
}


        补充 :
            1. 混合数组
                没有 key 就会默认添加索引, 添加的索引与 key 不会互相影响, 如果没有指定 key, 那么索引会取到之前的最大的索引下.
            
            2. 通过 [] 创建
                a. 判断当前数组是否已经存在, 如果不存在则先创建, 再将元素添加到数组第一个元素位置.
                b. 如果当前数组已经存在, 那么就将当前元素添加到数组中 --- 追加
$arr[] = 1;
$arr[] = 100;
$arr["name"] = "jack";
print_r($arr);


        3. count() :
            获取指定数组的长度
        
        2. unset() :
            它也可以用来删除数组中的某个成员. 但是删除了数组的元素之后, 并不会对数组元素的索引产生影响, 元素还会保留之前的索引, 意味着它只是删除了索引位置的元素, 并没有动态的改变数组的长度.

        3. 深度数组 : 二维数组
// 描述学生对象 : 姓名 + 年龄
$arr = array(
    array(
        "name" => "jack",
        "age" => 20
    ),
    array(
        "name" => "rose",
        "age" => 18
    )
);
print_r($arr);





    1.12 数据类型转换
<?php
$str = '132';
// 将一个内容为数字的字符串强制转换为一个整形的数字
$num = (int)$str;
// 将一个数字强制转换为布尔值
$flag = (bool)$num;
?>

        强制转换为数组时, 变量将会成为数组的第一个元素.


    1.13 运算符
        与 JavaScript 基本一致.
        注意 :
            字符串连接(拼接) 采用的是比较特殊的 ' . ' .
<?php
$name = 'zce';
// 拼接 `hey ` 和 `zce`
$message = 'hey ' . $name;
$foo = $message;
echo $foo;    // heyzce
?>





    1.14 语句
        分号分隔 if \ switch \ while \ for \ foreach \ function ...
            流程控制
                a. 顺序结构
                b. 分支结构
                    if...else
                    switch...case
                c. 循环结构
                    for
                    while
                    do while
                    foreach --- 专门用来遍历数组
<?php
// 指令式就是将开始 { 换成 :  结束 } 换成 endif;
if ($i > 0) :
  echo 'ok'
endif;


// for foreach while 也是一样
for ($i = 0; $i < 10; $i++) :
  echo $i;
endfor;
?>



    1.15 函数
        定义与使用函数的方式与 JavaScript 相同 :
<?php
// 函数名不区分大小写
function foo ($name, $title) {
  echo "$name ($title)";
}




// 调用
foo('zce', 'UFO');
Foo('zgd', 'SBO'); // 大小写不区分

        注意 :
            函数名不区分大小写 (不要这么做)
        建议在 PHP 中采用下划线样式 (snake_case) 做命名规则, 不管是函数还是变量.

        特性
            变量作用域
                关于变量作用域这一点, PHP 于绝大多数语言也都不同 : 默认函数内不能访问父级作用域的成员.
                在 JavaScript 中, 我们可以在函数作用域中使用父级作用域.
                而在 PHP 中 :
<?php
$top = 'top variable';
function foo () {
  $sub = 'sub variable';
  echo $top;
  // => 无法拿到
  function bar () {
    echo $top;
    // => 无法拿到
    echo $sub;
    // => 无法拿到
  }
  bar();
}
foo();
?>

                如果需要访问全局变量, 可以通过 global 关键字声明 :
<?php
$top = 'top variable';
function foo () {
  // 声明在当前作用域中获取全局作用域中的 `$top`
  global $top;
  $sub = 'sub variable';
  echo $top;
  // => `top variable`
  function bar () {
    // 声明在当前作用域中获取全局作用域中的 `$top` 和 `$bar`
    global $top, $bar;
    echo $top;
    // => `top variable`
    echo $sub;
    // => 任然无法拿到,因为 `$sub` 不再全局范围,而是在 `foo` 函数中定义
  }
  bar();
}
foo();
?>

            
            超全局变量
                PHP 中的许多预定义变量都是 "超全局的" , 这意味着它们在一个脚本的全部作用域中都可用. 在函数或方法中无序执行 global $variable; 就可以访问它们.

                这些超全局变量是(都是数组) :
                    a. $GLOBALS --- 引用全局作用域中可用的全部变量
                    b. $_SERVER — 获取服务端相关信息
                    c. $_REQUEST — 获取提交参数
                    d. $_POST — 获取 POST 提交参数
                    e. $_GET — 获取 GET 提交参数
                    f. $_FILES — 获取上传文件
                    g. $_ENV — 操作环境变量
                    h. $_COOKIE — 操作 Cookie
                    i. $_SESSION — 操作 Session

                $GLOBALS
                     $GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可).
                    PHP 在名为  $GLOBALS[index] 的数组中存储了所有全局变量.
                    变量的名字就是数组的键.
<?php
$x = 75;
$y = 25;
function foo () {
  $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
foo();
echo $z;
// => 100
?>






   1.16 常量的定义与使用
        常量跟变量一样也是一个数据容器, 但是不同的时一旦声明后就不允许被修改.
define(name, value, insensitive);    // 常量名称, 常量值, 是否对大小写敏感,默认为敏感

     
        PHP 中的魔术常量
            魔术常量的意思是指这个常量值会根据不同的场合返回不同的值.

            魔术常量 :
                __LINE__ : 可以获取当前的代码行
                __FILE__ : 可以获取当前文件的路径 : 目录 + 文件名
                __DIR__ : 可以获取当前文件的目录
                __FUNCTION__ : 可以获取当前魔术常量所在的函数




    1.17 载入其他文件 : 文件包含
        通常情况下, 当一个文件中的代码过长, 自然会想到要拆分到多个文件中.
        随着开发经验的积累, 慢慢会发现, 除了文件过长应该拆分文件, 更应该做的事情是根据用途去划分.
        载入文件 : 相当于将被载入的文件的代码在当前位置复制一份

        PHP 中引入其他 PHP 文件有四种方式 :
            a. require
            b. require_once
            c. include
            d. include_once
include '10-constant.php';


        四种方式的对比 :


require
require_once
include
include_once
被载入文件如果不存在是否影响继续运行
Y
Y
NN
多次调用是否会重复执行被载入的文件Y
N
Y
N
        使用层面 :
            a. include 一般用于载入公共文件, 这个文件的存在与否不能影响程序后面的运行
            b. require 用于载入不可缺失的文件
            c. 至于是否采用一次载入 (once) 这种方式取决于被载入的文件






    1.18 常用 API
        API (Application Programming Interface) 接口都是提供某种特定能力的事物,
        特点是有输入输出, 而我们在开发时 (写代码) 用到的接口称之为 API (应用程序编程接口)
        任何编程语言本身并没有太多的能力, 具体的能力大多数都来源于 API .
        PHP 的能力来源于 它有 1000+ 内置函数, 不是每一个函数都默认直接可以使用, 有一些需要安装或者启用额外的"插件"扩展.




        1. 字符串与数组处理
                字符串与数组操作均使用 PHP 提供的内置函数, 这里仅以几个函数作为示例, 后面会有单独的部分进行讲解.
        
            字符串函数(查看字符串长度) :
                a. strlen(无法处理宽字符)
                b. mb_strlen (根据当前php编码处理宽字符)
                    mb_internal_encoding(); 查看 PHP 当前的默认编码




        2. 时间处理
            时间处理默认采用格林威治时间(与中国所在的时区相差8小时), 需要进行设置, 这里我们要修改 PHP 的配置文件.

            a. 时间戳 : time()
                从 Unix 纪元 (格林威治时间 1970-01-01 00:00:00) 到当前时间的秒数
            b. 格式化日期 : date()


                格式化一个本地时间/日期
date('Y-m-d H:i:s');    // 2019-05-20 20:15:55


                格式化一个指定的时间戳
                可以通过 strtotime() 将将任何字符串的日期时间描述解析为 Unix 时间戳
strtotime("1970-1-2");



        3. 文件操作

函数
描述
PHP
file_get_contents()
将文件读入字符串
4
file_put_contents()
将字符串写入文件
5


            1. file_get_contents()
                需设置当前页面的返回值的类型是什么格式, 意味着后期浏览器接受了返回值后, 会按照图片格式进行解析.
header("Content-Type:text/html");    // 文档
header("Content-Type:image/jpeg");    // 图片

                读取文件内容, 如果读取成功就会返回一个字符串类型的值(文件内容), 如果失败, 就会返回 false.
$res = file_get_contents("data.txt");
var_dump($res);    // 文档
$res = file_get_contents("./images/monkey.png");
echo $res;    // 图片


            2. file_put_contents(文件路径, 需要写入的内容, FILE_APPEND)
                将指定的内容写入到文件, 同时返回当前成功写入的字符的数量
                FILE_APPEND : 设置当前的写入方式为追加
$count = file_put_contents("data.txt","这是我写入的内容",FILE_APPEND);
echo $count;


          4. explode()拆分字符串
expolde("分隔符", 目标变量);

                拆分后的字符串变成数组的形式存储并返回, 类似于 JavaScript 中的 split("分隔符").




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马