最近开始学PHP这门“世界上最好的语言”(非黑,程序员都知道这个梗)。在某大神同学的介绍下,让我先去W3Cschool看看。这几天拖着看完了“PHP教程”栏的部分,发现有编程语言基础后学习php的语法简直轻而易举,很多东西一看就懂。现在写个东西,简单记录下这些简单的东西。(说实话,看完这些,我觉得连入门都不算- -)
PHP脚本可以放在文档中的任何位置。
PHP脚本以 <?php 开始,以 ?> 结束。
<?php //代码 ?>
PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码。
<!DOCTYPE html> <html> <body> <h1>My first PHP page</h1> <?php echo "Hello World!"; ?> </body> </html>
PHP 中的每个代码行都必须以分号结束。分号是一种分隔符,用于把指令集区分开来。
PHP注释格式:
//注释 /*注释*/ #注释
PHP变量规则:
以$开头,后面跟着变量名,区分大小写。
变量名必须以字母或者下划线开头。
变量名只能有数字字母和下划线。
PHP变量没有声明,在第一次赋值时被创建。(跟Python类似)
PHP有四种变量作用域:
local
global
static
parameter
在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。
在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问。
<?php $x=5; // 全局变量 function myTest() { $y=10; // 局部变量 echo "<p>Test variables inside the function:<p>"; echo "Variable x is: $x"; echo "<br>"; echo "Variable y is: $y"; } myTest(); echo "<p>Test variables outside the function:<p>"; echo "Variable x is: $x"; echo "<br>"; echo "Variable y is: $y"; ?> <?php $x=5; $y=10; function myTest() { global $x,$y; //全局变量 $y=$x+$y; } myTest(); echo $y; // 输出 15 ?>
PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
<?php $x=5; $y=10; function myTest() { $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y']; } myTest(); echo $y; ?>
当一个函数完成时,变量被删除。若要防止变量被删除,可以在变量前加static。然后该变量将保留着函数前一次调用时的值。该变量仍是函数的局部变量。
在 PHP 中有两个基本的输出方式: echo 和 print。
echo 和 print 区别:
echo - 可以输出一个或多个字符串
print - 只允许输出一个字符串,返回值总为 1
提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。
使用 echo 命令输出变量和字符串:
<?php $txt1="Learn PHP"; $txt2="w3cschool.cc"; $cars=array("Volvo","BMW","Toyota"); echo $txt1; echo "<br>"; echo "Study PHP at $txt2"; echo "My car is a {$cars[0]}"; ?>
echo和print的区别
一般来说,PHP中动态输出HTML内容,是通过print 和 echo 语句来实现的,在实际使用中, print 和 echo 两者的功能几乎是完全一样。可以这么说,凡是有一个可以使用的地方,另一个也可以使用。但是,两者之间也还是一个非常重要的区别:在 echo 函数中,可以同时输出多个字符串,而在 print 函数中则只可以同时输出一个字符串。同时,echo函数并不需要圆括号,所以echo函数更像是语句而不像是函数。
echo 和 print 都不是函数,而是语言结构,所以圆括号都不是必需的。
他们的区别在于:
(1) echo可以输出多个字符串,像下面这样:
echo 'a','b','c';
如果你非要加上圆括号,注意写成echo ('a','b','c');是错误的,应该写成:
echo ('a'),('b'),('c');
它没有像函数的行为,所以不能用于函数的上下文
(2) print只能输出一个字符串,它可以表现得像一个函数,比如你可以如下使用:
$ret = print 'Hello World';
所有它能用在更复杂的表达式中。
另外,echo的效率相对比较快!
看看如下代码:
<?php $a='hello ';$b='php world!';echo $a,$b.'<br />';//echo 可以用逗号分隔字符串变量 来显示 print $a.$b.'<br />';//而print不能使用逗号,只能用点号分隔, //print $a,$b.'<br />';//这里使用逗号时报错。 ?>
分析总结:
echo 命令和print命令相同,没有区别
echo 函数和print函数有区别。
echo() 无返回值,与echo命令相同
print() 有返回值,成功,返1,false,返0.
printf() 和sprintf()类似,均为格式化输出,不同的是前者输出到标准输出,后者输出到变量
形如:
echo <<< EOT EOT; print <<< EOT EOT;的书写格式,其含义如下:
<<< 运算符,将由自定义分界符间的内容视为字符串,可对其间的变量做处理
EOT 自定义分界符,结束时必须位于行首
PHP 数据类型
String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)
字符串可以放在''或者""中。
整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。
浮点数是带小数部分的数字,或是指数形式。
布尔型可以是 TRUE 或 FALSE。
数组可以在一个变量中存储多个值。
NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。
NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别。
可以通过设置变量值为 NULL 来清空变量数据。
PHP 常量
常量值被定义后,在脚本的其他任何地方都不能被改变。
常量是一个简单值的标识符。该值在脚本中不能改变。
一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
注意: 常量在整个脚本中都可以使用。
用define()函数设置常量
define(string constant_name, mixed value, case_sensitive = true)
case_sensitive是是否对大小写敏感。
<?php // 区分大小写的常量名 define("GREETING", "Ro535"); echo GREETING; // 输出 "Ro535" echo '<br>'; echo greeting; // 输出 "greeting" ?> <?php // 不区分大小写的常量名 define("GREETING", "Ro535", true); echo greeting; // 输出 "Ro535" ?>
常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用。
字符串变量
$txt = "Hello world!"
在 PHP 中,只有一个字符串运算符。
并置运算符 (.) 用于把两个字符串值连接起来。
<?php $txt1="Hello world!"; $txt2="What a nice day!"; echo $txt1 . " " . $txt2; ?>
将输出:Hello world! What a nice day!
strlen() 函数返回字符串的长度(字符数)。
strpos() 函数用于在字符串内查找一个字符或一段指定的文本。
如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。
运算符
常用的运算符和Java的运算符差不多,挑几个不同的出来说说。
并置:"Hello "."World!" 连接两个字符串。在Java中是+。
PHP7+ 版本新增整除运算符 intdiv()。
3 == intdiv(10,3)
a .= b 等同于 a = a.b 连接字符串a和b并赋值给a。
恒等于:x===y。 不但要值相同,类型也要相同。5==="5"返回FALSE。
不等于:x<>y或者x!=y。
不恒等于:x!===y。 值不相同或者类型不相同。 5!==="5"返回TRUE。
与: and或者&&。
或: or 或者 ||。
异或: xor。
数组运算符:
x+y为x和y的集合。
x==y 如果 x 和 y 具有相同的键/值对,则返回 true。
x===y 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true。
x !== y 不相等。
x <> y 不相等。
x!===y 不恒等。
三元运算符:
(expr1) ? (expr2) : (expr3)
与C语言类似。
自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
在 PHP7+ 版本多了一个 NULL 合并运算符
<?php // 如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值 $username = $_GET['user'] ?? 'nobody'; // 类似的三元运算符$username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; ?>
组合比较符(PHP7+):
<?php // 整型 echo 1 <=> 1; // 0 echo 1 <=> 2; // -1 echo 2 <=> 1; // 1 // 浮点型 echo 1.5 <=> 1.5; // 0 echo 1.5 <=> 2.5; // -1 echo 2.5 <=> 1.5; // 1 // 字符串 echo "a" <=> "a"; // 0 echo "a" <=> "b"; // -1echo "b" <=> "a"; // 1 ?>
PHP中,条件if else、选择switch、while循环、do while循环、for循环跟Java相同。不说了。
说说foreach。
foreach ($array as $value) { 要执行代码; }
每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值。
<html> <body> <?php $x=array("one","two","three"); foreach ($x as $value) { echo $value . "<br>"; } ?> </body> </html> 输出 one two three
数组。
在 PHP 中,有三种类型的数组:
数值数组 - 带有数字 ID 键的数组
关联数组 - 带有指定的键的数组,每个键关联一个值
多维数组 - 包含一个或多个数组的数组
创建数组用函数array()
数值数组
创建数值数组的两种方法:
自动分配 ID 键(ID 键总是从 0 开始): $cars=array("Volvo","BMW","Toyota"); 人工分配 ID 键: $cars[0]="Volvo"; $cars[1]="BMW"; $cars[2]="Toyota";count() 函数用于返回数组的长度(元素的数量)。
遍历数组可以用for循环。
关联数组
创建也有两种方法:
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); or: $age['Peter']="35"; $age['Ben']="37"; $age['Joe']="43";
遍历可以用foreach循环。数组排列函数:
sort() - 对数组进行升序排列
rsort() - 对数组进行降序排列
asort() - 根据关联数组的值,对数组进行升序排列
ksort() - 根据关联数组的键,对数组进行升序排列
arsort() - 根据关联数组的值,对数组进行降序排列
krsort() - 根据关联数组的键,对数组进行降序排列
函数
function functionName() { 要执行的代码; }PHP 函数准则:
函数的名称应该提示出它的功能
函数名称以字母或下划线开头(不能以数字开头)。
如需让函数返回一个值,请使用 return 语句。
一些魔术变量。
__LINE__
文件中的当前行号
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。
它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。
函数名称
类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。
在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。
Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。
Trait 名包括其被声明的作用区域(例如 Foo\Bar)。
从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。
类的方法名
当前命名空间的名称(区分大小写)
其实还有一部分叫命名空间。不过学过Java的人理解了import和package,基本不会太纠结这个东西。不过在php中,实际上这部分挺复杂,但是用处不大,很容易搞混。如果心血来潮,再另外写文章。
w3c上的基础东西差不多就这样。其他东西打算看视频学。毕竟听课比较清楚,哈哈。