PHP基本语法总结

devtools/2024/10/11 13:19:20/
htmledit_views">

目录

输出语句

注释

数据类型(变量)

局部和全局作用域

类型比较(松散比较与严格比较)

常量

运算符

并置运算符

不等于

逻辑运算符

条件语句

数组

关联数组

数组排序

一般数组

关联数组

循环

函数

变量函数

魔术常量

命名空间

超级全局变量

面向对象

构造与析构函数

继承

接口interface

常量

抽象类

static与final关键字

调用父类构造方法


PHP 脚本以 <?html" title=php>php 开始,以 ?> 结束:

html" title=php>php"><?html" title=php>php
// PHP 代码
?>

输出语句

PHP 中使用 echoprint 语句来输出数据。

echo 和 print 区别:

echo - 可以输出一个或多个字符串

print - 只允许输出一个字符串,返回值总为 1

html" title=php>php"><?html" title=php>php
echo "Hello, World!";
?>

会输出Hello,World!

注释

PHP 支持三种注释方式:

单行注释:使用 //

单行注释:使用 # (较少使用)

多行注释:使用 /* */

html" title=php>php"><?html" title=php>php
// 这是一个单行注释
# 这也是一个单行注释
/*
这是一个多行注释
*/
?>

注释部分的代码不会被编译。

数据类型(变量)

变量是用于存储信息的"容器"

PHP 支持多种数据类型,包括但不限于:

字符串 (string):一系列字符。

整型 (integer):没有小数点的数字。

浮点型 (float):带有小数点的数字。

布尔型 (boolean):只有两个可能的值,true 和 false

数组 (array):存储多个值的集合。

对象 (object):面向对象编程中的实例。

NULL:表示一个未定义的变量。

PHP 中的变量总是以 $ 符号开始,后面跟着变量名。

html" title=php>php"><?html" title=php>php
$myVar = "Hello";
echo $myVar;
?>

会输出Hello。

局部和全局作用域

在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字(这一点与c语言不同)。

html" title=php>php"><?html" title=php>php
$x=5;
$y=10;function myTest()
{global $x,$y;$y=$x+$y;
}myTest();
echo $y; // 输出 15
?>

PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。

html" title=php>php"><?html" title=php>php
$x=5;
$y=10;function myTest()
{$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
} myTest();
echo $y;
?>

这样写也是正确的。

类型比较(松散比较与严格比较)

松散比较:使用两个等号 == 比较,只比较值,不比较类型。

严格比较:用三个等号 === 比较,除了比较值,也比较类型。

例如,"42" 是一个字符串而 42 是一个整数。FALSE 是一个布尔值而 "FALSE" 是一个字符串。

42与“42”值相等(使用==返回true)类型不同(使用===返回false)

常量

PHP 中的常量是指一旦定义后其值不能被改变的标识符。

常量值被定义后,在脚本的其他任何地方都不能被改变。

常量可以用 define() 函数或 const 关键字来定义。

运算符

大部分与c语言相同,现列举几个c语言里没有的:

并置运算符

并置运算符 (.) 用于把两个字符串值连接起来。

例如:

html" title=php>php"><?html" title=php>php
$txt1="Hello world!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
?>

上面的代码将输出:Hello world! What a nice day!

a .= b相当于a = a . b。

不等于

html" title=php>php里不等于可以使用与c语言相同的!=也可以使用x <> y,也表示不等于。

还有绝对等于x === y,如果 x 等于 y,且它们类型相同,则返回 true。

不绝对等于x !== y,如果 x 不等于 y,或它们类型不相同,则返回 true。

除了值相等以外,类也会判断是否相同。

逻辑运算符

与可以使用&&或者and,或可以使用||或者or。

还有异或符号x xor y,如果 x 和 y 有且仅有一个为 true,则返回 true。

条件语句

与c语言基本相同。elseif它的else与if中间不用空格。

if 语句 - 在条件成立时执行代码

if...else 语句 - 在条件成立时执行一块代码,条件不成立时执行另一块代码

if...elseif....else 语句 - 在若干条件之一成立时执行一个代码块

switch 语句 - 在若干条件之一成立时执行一个代码块

html" title=php>php">if ($x > 0) {echo "正数";
} elseif ($x == 0) {echo "零";
} else {echo "负数";
}

数组

数组能够在单个变量中存储多个值:

html" title=php>php"><?html" title=php>php
$cars=array("Volvo","BMW","Toyota");
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
?>

同样类似于c语言。

运行结果为:I like Volvo, BMW and Toyota.

在 PHP 中,array() 函数用于创建数组

html" title=php>php">$cars=array("Volvo","BMW","Toyota");
$cars[0]="Volvo";
$cars[1]="BMW";
$cars[2]="Toyota";

这两种赋值方式均可。

count($数组名);可以返回数组的长度。

关联数组

html" title=php>php">$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";

类似于c++里stl中的一些东西,构成了键值对。

html" title=php>php"><?html" title=php>php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
echo "Peter is " . $age['Peter'] . " years old.";
?>

运行结果为:Peter is 35 years old.

遍历关联数组使用foreach

html" title=php>php"><?html" title=php>php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");foreach($age as $x=>$x_value)
{echo "Key=" . $x . ", Value=" . $x_value;echo "<br>";
}
?>

运行结果为: 

Key=Peter, Value=35
Key=Ben, Value=37
Key=Joe, Value=43

数组排序

一般数组

html" title=php>php">sort($数组名)

按照值升序排列。

html" title=php>php">rsort($数组名)

按照值降序排列。

关联数组

html" title=php>php">asort($数组名)

根据数组的值,对关联数组进行升序排列。

html" title=php>php">arsort($数组名)

根据数组的值,对关联数组进行降序排列。 

html" title=php>php">ksort($数组名)

根据数组的键,对关联数组进行升序排列。

html" title=php>php">krsort($数组名) 

根据数组的键,对关联数组进行降序排列。

循环

while,do while,for循环与c语言一致。

唯一要注意foreach循环。foreach 循环用于遍历数组。

html" title=php>php">foreach ($array as $value)
{要执行代码;
}

每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值。

html" title=php>php">foreach ($array as $key => $value)
{要执行代码;
}

每一次循环,当前数组元素的键与值就都会被赋值给 $key 和 $value 变量(数字指针会逐一地移动),在进行下一次循环时,你将看到数组中的下一个键与值。

html" title=php>php"><?html" title=php>php
$x=array("Google","Runoob","Taobao");
foreach ($x as $value)
{echo $value . PHP_EOL;
}
?>

运行结果为: 

Google
Runoob
Taobao

函数

语法:

html" title=php>php"><?html" title=php>php
function functionName()
{// 要执行的代码
}
?>

和JavaScript很相似,以function开头表示这是一个函数后面跟着它的名字。

其它与c语言类似,有可以有传入值,通过return返回值。

变量函数

变量函数是指在 PHP 中,将一个变量作为函数名来调用的函数。

html" title=php>php">$func = 'foo';
$func();        // 调用 foo()函数$func = 'bar';
$func('test');  // 调用 bar()函数$func = 'echoit';
$func('test');  // 调用 echoit()函数

魔术常量

__LINE__用于显示文件中的当前行号。

__FILE__用于显示文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。

__DIR__显示用于文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。

__FUNCTION__在函数类返回该函数被定义时的名字(区分大小写)。

__CLASS__在类里面返回该类被定义时的名字(区分大小写)。

__TRAIT__实现代码复用,优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。

__METHOD__显示类的方法名,返回该方法被定义时的名字(区分大小写)。

__NAMESPACE__得到当前命名空间的名称(区分大小写)。

命名空间

用来解决重名问题。

默认情况下,所有常量、类和函数名都放在全局空间下,就和PHP支持命名空间之前一样。

命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。

html" title=php>php"><?html" title=php>php  
// 定义代码在 'MyProject' 命名空间中  
namespace MyProject;  // ... 代码 ...  

同一个文件中可以有不同的命名空间。建议使用大括号括起来。

html" title=php>php"><?html" title=php>php
namespace MyProject {const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */  }
}namespace AnotherProject {const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */  }
}
?>

超级全局变量

$GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。

html" title=php>php"> $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; 

相当于z = x + y。

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。具体查每样信息的语法可以百度查询。

PHP $_REQUEST 用于收集HTML表单提交的数据。

html" title=php>php"><html>
<body><form method="post" action="<?html" title=php>php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form><?html" title=php>php 
$name = $_REQUEST['fname']; 
echo $name; 
?></body>
</html>

PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"。

html" title=php>php"><html>
<body><form method="post" action="<?html" title=php>php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form><?html" title=php>php 
$name = $_POST['fname']; 
echo $name; 
?></body>
</html>

PHP $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。

面向对象

 − 定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。

对象 − 是类的实例。

成员变量 − 定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可成为对象的属性。

成员函数 − 定义在类的内部,可用于访问对象的数据。

继承 − 继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

父类 − 一个类被其他类继承,可将该类称为父类,或基类,或超类。

子类 − 一个类继承其他类称为子类,也可称为派生类。

多态 − 多态性是指相同的函数或方法可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。

重载 − 简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。

抽象性 − 抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。

封装 − 封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。

构造函数 − 主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。

析构函数 − 析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做"清理善后" 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。

使用new运算符创建对象。

html" title=php>php">$runoob = new Site;
$taobao = new Site;
$google = new Site;

构造与析构函数

在c++中构造函数与类同名,析构函数是构造函数名前加上一个~,但在html" title=php>php里构造函数与析构函数有固定的名字:

__construct与__destruct

构造函数:

html" title=php>php">function __construct( $par1, $par2 ) {$this->url = $par1;$this->title = $par2;
}

析构函数:

html" title=php>php"> function __destruct() {print "销毁 " . $this->name . "\n";}

继承

继承使用extends,html" title=php>php不支持多继承。

html" title=php>php">class Child extends Parent {// 代码部分
}

方法重写和访问权限基本与c++相同,不多赘述。 

接口interface

使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。

接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。

接口中定义的所有方法都必须是公有,这是接口的特性。

要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。

html" title=php>php"><?html" title=php>php// 声明一个'iTemplate'接口
interface iTemplate
{public function setVariable($name, $var);public function getHtml($template);
}// 实现接口
class Template implements iTemplate
{private $vars = array();public function setVariable($name, $var){$this->vars[$name] = $var;}public function getHtml($template){foreach($this->vars as $name => $value) {$template = str_replace('{' . $name . '}', $value, $template);}return $template;}
}

常量

可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。

html" title=php>php"> const constant = '常量值';

抽象类

任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。

定义为抽象的类不能被实例化。

类似于多态。

html" title=php>php"><?html" title=php>php
abstract class AbstractClass
{// 强制要求子类定义这些方法abstract protected function getValue();abstract protected function prefixValue($prefix);// 普通方法(非抽象方法)public function printOut() {print $this->getValue() . PHP_EOL;}
}class ConcreteClass1 extends AbstractClass
{protected function getValue() {return "ConcreteClass1";}public function prefixValue($prefix) {return "{$prefix}ConcreteClass1";}
}class ConcreteClass2 extends AbstractClass
{public function getValue() {return "ConcreteClass2";}public function prefixValue($prefix) {return "{$prefix}ConcreteClass2";}
}$class1 = new ConcreteClass1;
$class1->printOut();
echo $class1->prefixValue('FOO_') . PHP_EOL;$class2 = new ConcreteClass2;
$class2->printOut();
echo $class2->prefixValue('FOO_') . PHP_EOL;
?>

static与final关键字

声明类属性或方法为 static(静态),就可以不实例化类而直接访问。静态属性不可以由对象通过 -> 操作符来访问。

html" title=php>php">  public static $my_static = 'foo';

如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。

调用父类构造方法

PHP 不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct() 。

java里使用的是super,html" title=php>php使用用parent。

html" title=php>php"> parent::__construct(); 


http://www.ppmy.cn/devtools/123665.html

相关文章

光路科技以技术创新为驱动,打造创新型企业新标杆

近日&#xff0c;深圳市光路在线科技有限公司&#xff08;光路科技&#xff09;凭借其出色的创新能力和市场表现&#xff0c;荣获深圳市中小企业服务局颁发的“创新型中小企业”称号。这一荣誉标志着光路科技在推动行业发展和技术进步方面取得了显著成就。 光路科技自2008年成立…

ASP.NET MVC-懒加载-逐步加载数据库信息

环境&#xff1a; win10, .NET 6.0 目录 问题描述解决方案基础版数据库查询部分&#xff08;Entity Framework&#xff09;控制器前端页面 加载到表格版 问题描述 假设我数据库中有N个表&#xff0c;当我打开某页面时&#xff0c;每个表都先加载一部分&#xff08;比如20条&am…

【Arduino IDE安装】Arduino IDE的简介和安装详情

目录 &#x1f31e;1. Arduino IDE概述 &#x1f31e;2. Arduino IDE安装详情 &#x1f30d;2.1 获取安装包 &#x1f30d;2.2 安装详情 &#x1f30d;2.3 配置中文 &#x1f30d;2.4 其他配置 &#x1f31e;1. Arduino IDE概述 Arduino IDE&#xff08;Integrated Deve…

CNN+Transformer解说

CNN&#xff08;卷积神经网络&#xff09;和Transformer是两种在深度学习领域广泛使用的模型架构&#xff0c;它们在处理不同类型的数据和任务时各有优势。 CNN擅长捕捉局部特征和空间层次结构&#xff0c;而Transformer擅长处理序列数据和长距离依赖关系。 将CNN与Transform…

mysql学习教程,从入门到精通,SQL HAVING 子句(32)

1、SQL HAVING 子句 当然&#xff01;HAVING 子句在 SQL 中用于对分组后的结果进行过滤。它通常与 GROUP BY 子句一起使用&#xff0c;以便对聚合函数&#xff08;如 SUM(), COUNT(), AVG(), MAX(), MIN() 等&#xff09;的结果进行条件筛选。 以下是一个示例&#xff0c;假设…

Git分支-团队协作以及GitHub操作

Git分支操作 在版本控制过程中&#xff0c;同时推进多个任务> 程序员开发与开发主线并行&#xff0c;互不影响 分支底层也是指针的引用 hot-fix:相当于若在进行分支合并后程序出现了bug和卡顿等现象&#xff0c;通过热补丁来进行程序的更新&#xff0c;确保程序正常运行 常…

基于补全学习的时空数据自适应模型演化系统ComS2T

人工智能咨询培训老师叶梓 转载标明出处 时空学习模型通过融合多种空间卷积和时间演化技术&#xff0c;有效捕捉城市数据的复杂异质性。然而&#xff0c;快速的城市化进程导致城市数据分布和结构频繁变动&#xff0c;这与现有模型假设训练和测试数据独立同分布的情况相悖。现实…

vue3的v-model使用

vue3的v-model使用 单个绑定值 子组件 props: [‘modelValue’], emits: [‘update:modelValue’], 注&#xff1a;modelValue是默认的&#xff0c;如果只有一个需要绑定v-model&#xff0c;可使用modelValue 此时父组件写法 <CustomInput v-model"searchText"…