PHP基础学习第二篇

php中有8种数据类型,分为标量型、复合型和特殊型三类。

标量型:string、int、float、boolean
复合型:array、object
特殊型:null、resource

string

字符串类型就是把任何的数据加上引号(单引号和双引号)。单引号和双引号的区别: 单引号不能解析变量,双引号可以。另外他们支持的转义字符数量不一样

双引号转义字符

单引号转义字符只有\\\'

$name = 'apple';

echo "name: {$name}, 价格 \$10"; // name: apple, 价格 $10

echo 'name: {$name}, 价格 \$10'; // name: {$name}, 价格 \$10

echo 'name: \'apple\''; // name: 'apple';

定界符

heredoc是php用来引用字符串的一种方式,使用操作符 <<< 表示,操作符后紧跟标识符,标识符可以自定义,只有保持开始表示符和结束表示符一样即可,结束标识符必须独占一行,且必须顶格写,最后以 ‘;’ 分号结尾。

$a = 'hello world';

// 内部可以写html、css、js、php
$str = <<<EOF
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <p>$a</p>
    </body>
    </html>
EOF;

echo $str; // hello world

与之类似的有一个nowdoc,需要在标识符上加一个引号,他和heredoc有一点不同,就是不能嵌套php代码,只能嵌套html css js代码

$str = <<<'EOF'
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <p>hello world</p>
    </body>
    </html>
EOF;

echo $str; // hello world

字符串常用函数

explode($delimiter, $string [, $limit]): 把字符串通过一个分割字符进行分割成数组

$str = 'a,b,c';
var_dump(explode(',', $str));

implode($glue, $pieces): 把一维数组转换成字符串

$arr = array('a','b','c');

echo implode('-', $arr); // 'a-b-c';

trim()

ltrim($str [,$character_mask]): 去除字符串左边的空白字符或其他字符

rtrim($str [,$character_mask]): 去除字符串右边的空白字符或其他字符

trim($str [,$character_mask]): 去除字符串两边的空白字符或其他字符

返回去除空白字符(或其他字符)后的字符串

注意:character_mask仅支持英文字符

substr_replace

mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )

在字符串 string 的副本中将由 start 和可选的 length 参数限定的子字符串使用 replacement 进行替换。

$name = 'wmui';
echo substr_replace($name, 'haha', 1, 3); // whaha

str_replace
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

该函数返回一个字符串或者数组。该字符串或数组是将 subject 中全部的 search 都被 replace 替换之后的结果

$name = 'wmui';

echo str_replace('w', 'a', $name); // 'amui'

substr()

int和float

int类型即整数:包括整数、0和负数。有二进制、八进制、十进制和十六进制四种表示方法。二进制以0b开头,八进制数以0开头,十六进制数以0x开头。

float类型即浮点数:php中使用双精度存储浮点数(双精度double是用 8 个字节来存储的,单精度是用4个字节来存储的)。

数值的取值范围和平台有关,本机使用的操作系统是mac OS 64位,PHP版本7.3.0

// 整数取值范围: 9223372036854775807 ~ -9223372036854775808

echo PHP_INT_MAX;
echo '<br>';
echo PHP_INT_MIN;
echo '<br>';

// 浮点数取值范围:1.7976931348623E+308 ~ 2.2250738585072E-308

echo PHP_FLOAT_MAX;
echo '<br>';
echo PHP_FLOAT_MIN;

整数如果超出最大值,会自动转换成浮点数,并自动转为科学计数法。

注意: PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.11e-16。非基本数学运算可能会给出更大误差,并且要考虑到进行复合运算时的误差传递。

此外,以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118...。

所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。

boolean

在PHP中布尔型的数据有两个值:true和false

array

数组创建方式

方式一:array(ele, ele, ele);

方式二:array(key=>val, key=>val, key=>val);

方式三:$var[index]=val;

$arr1=array(1,2,3);

$arr2=array('name'=>'wmui', 'age=> 18);

$arr3[]=1;
$arr3[]=2;
$arr3[]=3;

数组细节

  • 元素是由“下标”和“值”组成,也称为“键值对”;
  • 下标就是每个数据值的对应名称,为什么有“下标”,原因每个数据有可以不一样(多个值)进行区分的作用。
  • 下标可以自定义也可以让系统自动生成,如果是没有声明下标(没有自定义),这个时候下标为:0开始的依次递增的顺序的整数,如:0,1,2,3,4..
  • 如果下标自定义了,就会按照自定义的下标来区分数据,没有下标的从0开始依次递增
  • 如果其中定义了一个数字,那么这个数组的后面的数据的下标都从定义的数字开始依次递增
  • 如果后面的元素中的下标和前面元素的下标“重复”了,后面元素的值会覆盖前面的元素值

数组的自增

通过$arr[]=val添加新元素

数组常用函数

count(): 获取数组元素的个数

is_array(): 检测是否是数组

print_r(): 打印数组中的键值对

数组循环

方法一:for循环,只能遍历索引数组,内部支持break和continue关键字。

$arr = array('wmui', 'li', 'wang');

for ($i=0; $i < count($arr); $i++) { 
    echo $arr[$i] . '<br>';
}

// wmui
// li
// wang

方法二:foreach循环,可以遍历所有类型数组


$arr = array('name'=>'wmui', 'age'=>18, 'sex'=>'boy');

foreach ($arr as $key => $val) {
    echo $key . $val . '<br>';
}

// namewmui
// age18
// sexboy

方法三:while-list-each循环,这种方法也可以遍历所有类型数组


$arr = array('name'=>'wmui', 'age'=>18, 'sex'=>'boy');

while(list($key, $val)=each($arr)) {
    echo $key . $val . '<br>';
}

// namewmui
// age18
// sexboy

var_dump(each($arr)); // 该方法每次运行会从数组中依次取一个元素,并返回以下四条信息
// array(4) { 
// [1]=> string(4) "wmui" 
// ["value"]=> string(4) "wmui" 
// [0]=> string(4) "name" 
// ["key"]=> string(4) "name" 
// }


list($one, $two) = each($arr); // 该方法把数组中的值赋给一组变量,仅能用于数字索引的数组,并假定数字索引从 0 开始

echo $one . $two; // namewmui

方法四:while循环和do-while循环,同JS用法一样

冒泡排序

// 原理:
$arr = array(3,2,1,5,4);

for ($i=0; $i < count($arr); $i++) {
    for ($j=$i; $j < count($arr) - $i - 1; $j++) { 
        if($arr[$j] > $arr[$j+1]) {
            // 位置交换
            $tmp=$arr[$j];
            $arr[$j] = $arr[$j+1];
            $arr[$j+1] = $tmp;
        }
    }
}

var_dump($arr); 
// array(5) { [0]=> int(2) [1]=> int(1) [2]=> int(3) [3]=> int(4) [4]=> int(5) }
//

object

世间万物皆对象,所有的名词都可以看作是一个对象。后面会有详细总结

null

NULL 类型唯一可能的值就是 NULL

在PHP中只能有定义变量并赋值的情况,没有只定义不赋值,这个时候需要创建一个变量,不知道存储的是什么值,这个时候可以使用null来创建变量。

resource

引用php外部资源时,这个时候的类型就是resource类型。资源是通过专门的函数来建立和使用的。

$a = mysql_connect('localhost', 'root', '');

var_dump($a); // resource

数据类型转换

在PHP中分两种转换形式:自动转换和强制转换

自动转换:通过特定的写法就会改变原来的类型

$name = 'a';
if($name) {
    // todo
}

强制转换:可以使用一些特殊的方式来强制性改变类型

$num = 1;
var_dump((string)$num);  // '1'

运算符

错误抑制符

如果代码有错误,可以强制屏蔽一些不重要错误。使用@符号抑制错误

$name;

echo @$name;

执行运算符

通过使用反引号``,可以直接执行命令

$name = `ls -al`;

echo "<pre>$name</pre>";

字符串连接符

通过..=进行字符串的拼接

// 四位数随机数
$num = rand(0,9);
$num .= rand(0,9);
$num .= rand(0,9);
$num .= rand(0,9);

echo $num; // 2314 

数组运算符

联合:+把多个数组合并为一个数组,如果数组的下标重复,则这个元素无法合并

等于:==,两个数组是否相等;===两个数组是否全等

不等于:!=,两个数组是否不相等;!==两个数组是否不全等

<?php

$arr1 = array(1,2,3);
$arr2 = array(0=>4, 4=>5, 6);
$arr3 = array('1', '2', '3');

var_dump($arr1+$arr2); // array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [4]=> int(5) [5]=> int(6) }

var_dump($arr1 === $arr3); // bool(false)
var_dump($arr1 == $arr3); // bool(true)

?>

源码、反码和补码

相关总结移步至此

posted @ 2019-06-23 20:29:55 浏览(173) PHP

avatar