搜索文章

输入标题或内容中的关键词。

← 回到技术手记
编程

PHP 学习笔记(一):语法、类型与流程控制

gemhack··10 分钟阅读

本文整理 PHP 基础学习笔记。涉及旧版行为的内容保留历史说明,运行时应按实际 PHP 版本核对。

基本语法

1.php标记

php代码标记以<?php ?>格式给出,可以写在同一行,问号和php之间不能有空格

<?php ?>

<?php

?>

除此之外还有一个特殊的格式**<?=**这个格式等价于 <?php echo

<?='hello,world';

三种标记格式都可以没有?>结尾,当没有?>的时候,即使只有一行代码也要加分号,并且接下来的所有文本都会被当做php代码解析,所以不能再其中加入html等其他语言的内容。

<?php
    echo 'hello,world';# 分号不能省略

还有一种 <? 短标记格式,其可用性取决于 short_open_tag 配置;<?= 短 echo 标记不依赖该配置。当开启的时候,可以使用如下的格式

<?  ?>
# 同样可以把/?/>省略,例如:
<? echo

以上的特殊格式的php标记<?=会将第一行代码的结果或者文本内容输出,遇到分号为止。之后的代码仍然是当做php代码执行,但是不会主动输出。

凡是在一对开始和结束标记之外的内容都会被 PHP 解析器作为普通文本输出,这使得 PHP 文件可以具备混合内容。 可以使 PHP 嵌入到 HTML 文档中去,但是php代码只能运行在.php文件中,不能运行在html,css,js文件中,但是php文件中可以包含html,css,js代码

<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <?php echo 'hello';
        ?>
    </body>
</html>
<!--写法正确,php代码可以穿插在html文本中-->

2.注释语句

PHP 支持 C,C++ 和 Unix Shell 风格(Perl 风格)的注释

<?php
    echo 'This is a test'; // 这是单行 c++ 样式注释
    /* 这是一条多行注释
       另一行也是注释 */
    echo 'This is yet another test';
    echo 'One Final Test'; # 这是单行 shell 风格的注释
?>

数据类型

1.简介

PHP 是动态类型语言,这意味着默认不需要指定变量的类型,因为会在运行时确定。PHP中包含了八大数据类型。

标量类型:整型int,浮点型float,字符型string,布尔型bool,

数组型array,

空值null,

类object,

资源类型resource。

对于变量所属的数据类型的判断,可以使用var_dump()函数和get_debug_type()函数来将变量的类型和值输出。也可以使用is_type表达式来判断是否是该类型的值。

函数名 作用 说明
var_dump() 显示变量的类型、值以及对象的属性和类名等信息。 一般用于调试阶段
get_debug_type() 只返回变量的类型。 PHP8.0.0之后才能使用
is_type() //type可以为八个数据类型的任意一个。如is_string() 判断是否为该类型,返回bool值
gettype() 返回变量的类型 与 get_debug_type() 的类型命名细节不同;旧版本也可使用

2.NULL

int可以用八进制,十进制和十六进制表示

float可以用科学计数法表示

string可以用双引号””和单引号”,但是在双引号中可以使用变量,也可以使用转义字符,会将其转化为对应的值,但是单引号会当做普通字符串处理。

将变量赋值为null可以清空变量

数组可以用array()和[]来初始化;

使用var_dump()可以输出变量的类型和值,也可以使用echo gettype($a);

$a = -15;
$b = 1.25E-5;
$c = true;
$d = array("hello","scis");
$e = null;

3.输出语句

输出语句有两种,echo和print。两者都有两种语法格式。

不同:echo效率高,开支小,可以同时输出多个字符串,用逗号隔开

print只能输出一个字符串,有固定返回值1

echo 'string1','string2'...;
print 'string';
echo('string');
print('string');

4.变量

php中的变量声明为:$变量名,php为弱类型的语言,变量不需要指定类型,会自动分配。

命名规则:数字加大小写加$和_,只能以字母和下划线开头,区分大小写。驼峰命名,下划线命名

5.命令行运行

php代码可以在cmd中直接运行,使用php 文件.php运行,或者使用vscode运行。

读取控制台的输入可以使用readline(“hint”);或者fgets(STDIN);

<?php
    $in = readline("请输入内容");
    echo $in;
    //fgets
    echo "hint2";
    $a = fgets(STDIN);
    echo $a;
?>

5.常量

定义方式

1.define(key,value);

2.const key = value;

define('name','zhangsan');
const sex = '男';

const不能在条件中使用,常量名可以用变量拼接,访问的时候可以使用constant(a.b)来访问。

if(isset($name))
{
    define('xiaoji'.$name,'lisi');
}
echo constant('xiaoji'.$name);

使用get_defined_constants()可以获取所有的常量值,参数加true可以实现对常量的分组,获得的数组中,’user’键名对应的键值数组为用户创建的常量。

$value = get_defined_constants(true);
var_dump($value['user']);

八个魔术常量

__FILE__//获取当前文件的绝对路径
__LINE__//获取当前代码所在行号
__DIR__//获取当前文件所在目录的绝对路径
__FUNCTION__//获取调用该常量的方法名
__CLASS__//获取调用该常量所在的类型
__NAMESPACE__//获取调用该常量的命名空间
__METHOD__//获取调用该常量所在的位置信息,格式为namespace/class::method
__TRAIT__

6.定界符EOF

在php中可能会遇到复制大段代码或者文本的情况,文本中有双引号,单引号等,如果一个个转义会显得非常麻烦,这时候可以使用定界符EOF,定界符会将内部的文本格式和数据原封不动的储存下来,但是可以解析变量和转移字符。

$b = 123;
echo <<<EOF
在这里是定界符内部,所有文本包括“和‘都可以不用考虑配对和转义,在'这里,也可以使用\n和$b,都会被解析'
EOF;

语法格式: <<<EOF

EOF;

其中PHP 7.3 之前,结束标识符必须顶格;较新版本允许缩进,但应与正文缩进规则一致,EOF可以换成任意相同的字符,只需要保证一致,并且不会在内容中顶格出现,

定界符包裹的内容可以用变量存储起来,如

$a = <<<EOF
 使用了变量存储。\n
EOF;
echo $a;

在定界符中使用的html标签也会被保留下来,输出到浏览器上时会对其进行渲染,成为正常的html页面。

运算符

1.算术运算符

+,-,*,/,%,-(取相反数),~(取反运算)a.b(并置运算,连接两个字符串)

2.赋值运算符

=,+=, -=, *=, /= ,%=, .=

3.自增自减运算符

++前置,后置++,–前置,后置–

4.比较运算符

==,弱相等,只比较值,以下是 PHP 7 及更早版本中数值与字符串比较的历史规则:

以数字开头,则为直到第一个非数字为止。如 45sfaf45 ->45

以非数字开头,则转为0,

===,绝对相等,比较值和类型必须完全相同。

!=,!==

<,>,<=,>=

5.逻辑运算符

and,or,xor,&&,||,!

and和&&作用相同,or和||作用相同,都具有短路效果,但是&&和||的优先级更高。

6.其他运算符

三目运算符 条件?值1:值2(条件为真返回值1,为假返回值2)

空合并运算符 条件??值1(条件是否未定义或为空,是则返回值1,否则返回条件值)//php7之后支持

组合比较符 $a<=>$b (用于比较整型,浮点数,和字符串。若$a < $b,返回-1,若$a == $b,返回0,若$a > $b,返回1)//php7之后支持

分支结构

1.判断

if()
{

}

switch()
{
    case 1:
        break;
    case 2:
        break;
    default:
        break;

}

2.循环

for( ; ; )
{

}

while( )
{

}

do
{

}while( );
//break 表示跳出当前循环,break 2;跳出两层循环; break 3...

参考资料

评论发表评论

评论

发表评论

邮箱不会公开。标有 * 的项目为必填项。