PHP学习笔记1

更新记录

2017.01.18 添加超全局变量和数组部分;补充代码书写和注释的内容
2017.02.09 补充完善字符串相关内容;补充变量类型相关内容

一些基本概念

  • PHP代码写在PHP标签里面,,一个文件可以有多对标签,当代码结束以后后面没有其他内容时,通常不闭合标签,一是这种情况PHP引擎本身也能完成解析,二是可以避免埋下一些坑点;例如是嵌套HTML的.php文件那当然是要闭合的啦。

    其实还有诸如短标签(需要在安装配置里开启),script标签,ASP风格(5.3以后废弃)这些书写方式,不过知道就好了。

  • 注释代码除了JS里的两种方式外还支持shell风格的#注释

  • 内容输出

  • echo语句: echo '这是一个字符串', 123; echo语句主要输出字符串,数字,可以一次输出多个内容,用逗号隔开。另外,PHP的语法比JS更加严格,像这个echo语句,echo后面没有空格,语句结束没有分号,都会报语法错误。

  • print: print 123;print('abc');两种方式都可以达到同样的输出。print和echo两者的区别:
    1.echo和print都不是函数,是PHP语言本身的结构,但是echo没有返回值,print会有返回值;
    2.echo可以一次性输出多个内容,print不可以,会报错
    3.echo的运行速度比print快

  • var_dump函数,输出的内容会很详细


  • echo在输出布尔值的时候,true会输出1,false不会输出;print和print_r也同样如此。
echo true, false, true;  // 11
print true;  // 1
print false;  // 空白,没有输出
print_r(true);  // 1
  • 变量与数据类型
    $声明变量,PHP变量名可以用中文,不过一般不会这么写的;
    PHP的变量共有8种原始类型,其中四种标量类型(整型 integer,浮点型 float,布尔型 boolean,字符串 string),两种复合类型(数组 array,对象 object),两种特殊类型(资源 resource,空 null);
    gettype()函数传入变量查看类型;
    声明变量但未赋值,或者赋值为null(NULL, NULl大小写不敏感),或者对变量调用unset()函数,变量的值都为特殊类型null;
    字符串变量用双引号时,可以传入变量自动解析,换言之,如果想在字符串里输出美元符号$,那就得使用单引号字符串了;
    跟JS同样的,字符串里的引号,可以通过单双引号交叉或者转义符号实现;
    可以使用Heredoc结构形式来创建长字符串,以<<<(界定符)GOD(标识符)作为开始,然后字符串结尾处再使用GOD结束;

    $a = 123;
    $b = "abc$a";  // 'abc123'
    $c = 'abc$a';  // 'abc$a'
    $d = <<

    创建对象$obj = new stdClass();
    PHP的变量作用域更加严格,同样也有全局变量和局部变量,即使是全局变量,在函数内也无法直接访问,要想在函数内访问外部变量,一般通过传递参数来进行;函数内访问全局变量可以使用global关键字,但现在一般也不这么做了。

    $a = 11;
    test();
    function test(){
        global $a;
        echo $a;
    }
    
  • 运算符
    PHP的字符串拼接用.符号,访问对象的属性用->符号,和JS区别开来。
    注意两个例子:

    echo 'a' . 222, '
    '; // a222,后面的数字222会被转换成字符串来运算 echo 'a' + 222; // 222 // 前面的字符串a被转换成数字再运算,由于不是一个合法字符,所以没有数值

    判断不相等!=<>
    逻辑与&&和逻辑或||也可以分别用andor标示

  • 函数
    函数的声明同样也会提升,参数视为变量需要用$符号;

    test(123);
    function test($a) {
        echo 'test' . $a;
    }
    

    PHP有很多自带函数,列举几个常见的,详细使用可以查看手册。
    date('Y-m-d H:i:s'); date('今年是Y年');参数中对应的字母会转换为年月日,日分秒,注意Y的大写;
    strlen('abc def') // 7计算字符串长度,空格也算字符串
    截取字符串:

    $str = 'abcdefg';
    echo substr($str, 3); // 从下标为3的字符开始截取到最后,defg
    echo substr($str, 0, 3); // abc,从下标0截取到下标3
    echo substr($str, -3); // efg,用负数表示将最后3个字符裁剪出来
    
  • 常量
    define函数定义常量

    define('a', '字母a');
    echo a;  // 定义好的常量可以直接访问,不用`$`
    // 一些PHP预设好的常量
    echo '当前运行的PHP文件是 ' . __FILE__;
    echo '
    当前运行的PHP文件所在目录是 ' . __DIR__; echo '
    运行这个脚本的PHP程序文件是 ' . PHP_BINARY;
  • 超全局变量
    这是JS没有的东西,就是在整个PHP的运行环境的任何地方都能直接访问,无需加global,主要记住三个常用的,都是数组,$_GET, $_POST, $_SERVER,前两个就是获取get和post参数了。

  • 数组
    目前看来PHP里面数组非常重要,像JS里面对象那样键值对存储数据的形式,在PHP里其实也是作为数组存在的。

    // 索引数组
    $arr1 = [1, 2, 'abc'];
    echo $arr1[0]; // 还是下标访问
    // count()函数返回数组有多少个元素
    echo count($arr1);
    // 需要重点注意的是:
    // 如果传入的变量不是数组而是其他的比如字符串,数字,布尔值,那么都会返回1
    // 追加元素
    $arr1[] = 'def';
    // isset()函数检验是否存在该元素
    echo isset($arr1[3]); // 存在 输出1
    echo isset($arr1[4]); // 不存在 不输出
    
    // 关联数组
    // 其实就是键值对的形式,注意
    $arr2 = [
        'name' => '老王',
        'age' => 26,
        6 => 'abc', // 其实用数字作key也是可以的,从规范来讲一般不会这么干
    ];
    echo $arr2['name']; // 和JS里的对象很像了,当然对象更多用.访问属性
    // 多维数组,当然可以无限嵌套下去
    $arr3 = [
        'name' => '老王',
        'children' => [
            'Lucy',
            'Lily'
        ],
        'address' => [
            'city' => '北京',
            'district' => '朝阳区',
            'other' => ['123', '456'],
        ],
    ];
    echo $arr3['children'][0];
    echo $arr3['address']['city'];
    
    // 输出数组可以用print_r()函数
    print_r($arr1);  // Array ( [0] => 1 [1] => 2 [2] => abc [3] => def )
    print_r($arr2); // Array ( [name] => 老王 [age] => 26 [6] => abc )
    // 关联和多维数组直接输出不方便看的话可以这样
    echo '
    ';
    print_r($arr3);
    echo '
    '; // foreach循环数组 foreach ($arr2 as $value) { echo $value . '
    '; } foreach ($arr2 as $key => $value) { echo $key . ' : ' . $value . '
    '; } foreach ($arr1 as $char) { echo $char . '
    '; } foreach ($arr1 as $num => $char) { echo $num . ' : ' . $char . '
    '; }

你可能感兴趣的:(PHP学习笔记1)