php入门随手记
代码规范
<?php
// php代码内容
echo "hello php";
?>
简介:
- php是一门弱类型语言,不需要声明变量的类型
1.注释
<?php
// 单行注释
?>
<?php
/*
多行注释
多行注释
*/
?>
2.变量
$valueName = value;
变量名必须以字母或下划线作为开始
<?php
$a=1;
$b=2;
$sum = $a + $b;
echo $sum;
?>
3.函数与作用域
php提供了超1000个内置函数
global关键字
在函数外定义的变量具有全局作用域,在函数内部访问全局变量需要使用global关键字
<?php
$x=5;
function mytest(){
global $x;
echo $x;
}
mytest();
?>
函数传参
<?php
$x=5;
function mytest($value){
global $x;
echo $x;
echo $value;
}
mytest("<h1>这是一个value</h1>");
?>
函数返回值
<?php
$x=5;
function mytest($value){
global $x;
echo $x;
echo $value;
return 666;
}
$num = mytest("<h1>这是一个value</h1>");
echo $num;
?>
static作用域
<?php
function mytest(){
static $x = 0;
echo $x;
$x++;
echo PHP_EOL;//换行符
}
mytest();
mytest();
mytest();
?>
每次调用函数时,声明为static的变量为静态变量,即函数运行结束时不会被删除,仍保持着上一次的值
4.php可以嵌入html代码(html也可以嵌入php代码)
<?php
echo "<hr>";
echo "<a href='https://www.baidu.com'>百度一下</a>";
?>
5.并置运算符
在php中只有一个字符串运算符,那就是并置运算符:.
作用是把两个字符串连接起来
<?php
function test(){
$str1 = "Hello World!";
$str2 = "你好,世界!";
echo $str1 . " " . $str2;
}
test();
?>
6.php的基础类型与类型转换
基础类型
PHP 的基础类型主要是
-
标量:int、float、string、bool
-
复合:array、object
-
特殊:resource、NULL
类型转换
$str1 = string(111);
<?php
$str1 = "hello world!";
$target = "world";
echo $target . "所在的位置为:" . (string) strpos($str1,$target);
?>
7.php运算符
1. 算术运算符
| 运算符 | 示例 | 说明 |
|---|---|---|
+ |
$a + $b |
加法 |
- |
$a - $b |
减法 |
* |
$a * $b |
乘法 |
/ |
$a / $b |
除法 |
% |
$a % $b |
取模(余数) |
** |
$a ** $b |
幂运算(PHP 5.6+) |
2. 赋值运算符
| 运算符 | 示例 | 说明 |
|---|---|---|
= |
$a = 10 |
赋值 |
+= |
$a += 5 |
加后赋值 |
-= |
$a -= 5 |
减后赋值 |
*= |
$a *= 5 |
乘后赋值 |
/= |
$a /= 5 |
除后赋值 |
%= |
$a %= 5 |
取模后赋值 |
.= |
$a .= "b" |
字符串连接并赋值 |
3. 比较运算符
| 运算符 | 示例 | 说明 |
|---|---|---|
== |
$a == $b |
等于(值相等) |
=== |
$a === $b |
全等(值和类型都相等) |
!= 或 <> |
$a != $b |
不等 |
!== |
$a !== $b |
不全等 |
< |
$a < $b |
小于 |
> |
$a > $b |
大于 |
<= |
$a <= $b |
小于等于 |
>= |
$a >= $b |
大于等于 |
<=> |
$a <=> $b |
太空船运算符:小于返回 -1,等于返回 0,大于返回 1(PHP 7+) |
4. 递增 / 递减运算符
| 运算符 | 示例 | 说明 |
|---|---|---|
++$a |
前置递增 | 先加 1,再返回值 |
$a++ |
后置递增 | 先返回值,再加 1 |
--$a |
前置递减 | 先减 1,再返回值 |
$a-- |
后置递减 | 先返回值,再减 1 |
5. 逻辑运算符
| 运算符 | 示例 | 说明 |
|---|---|---|
&& |
$a && $b |
与(and) |
|| |
$a || $b |
或(or) |
! |
!$a |
非 |
and |
$a and $b |
与(优先级比 && 低) |
or |
$a or $b |
或(优先级比 || 低) |
xor |
$a xor $b |
异或 |
6. 位运算符
| 运算符 | 示例 | 说明 |
|---|---|---|
& |
$a & $b |
按位与 |
| |
$a | $b |
按位或 |
^ |
$a ^ $b |
按位异或 |
~ |
~$a |
按位取反 |
<< |
$a << 2 |
左移 |
>> |
$a >> 2 |
右移 |
7. 字符串运算符
| 运算符 | 示例 | 说明 |
|---|---|---|
. |
$a . $b |
字符串拼接 |
.= |
$a .= $b |
拼接并赋值 |
8. 数组运算符
| 运算符 | 示例 | 说明 |
|---|---|---|
+ |
$a + $b |
数组合并(不覆盖相同键值) |
== |
$a == $b |
数组是否相等(键值对相同即可) |
=== |
$a === $b |
数组是否全等(键值对和顺序、类型完全相同) |
!= |
$a != $b |
数组不相等 |
!== |
$a !== $b |
数组不全等 |
9. 类型运算符
| 运算符 | 示例 | 说明 |
|---|---|---|
instanceof |
$obj instanceof ClassName |
判断对象是否某个类的实例 |
10. 其他运算符
| 运算符 | 示例 | 说明 |
|---|---|---|
`命令` |
$out = `ls -l`; |
执行系统命令,返回结果 |
@ |
@$a = 1/0; |
错误控制运算符(忽略错误,不推荐过度使用) |
?: |
$a = $x ? $y : $z; |
三元运算符 |
?? |
$a = $x ?? $y; |
Null 合并运算符(PHP 7+) |
8.选择结构
if...elseif...else
<?php
$t = 10;
if($t > 10){
echo "大于10";
}elseif($t == 10){
echo "等于10";
}else{
echo "小于10";
}
?>
switch
<?php
$value = 3;
switch($value){
case 1:
echo "值为1";
break;
case 2:
echo "值为2";
break;
case 3:
echo "值为3";
break;
default:
echo "未知的值";
break;
}
?>
9.循环结构
while循环
<?php
while(条件){
// 循环体
}
?>
do...while
<?php
do{
// 循环体
}while(循环条件);
?>
for循环
for(初始值;条件;增量){
// 循环体
}
for...each
普通数组:
<?php
$cars = array("Volvo", "BMW", "Toyota");
foreach($cars as $value){
echo " value=" . $value . "<br>";
}
?>
关联数组:
<?php
$age=array();
$age["Peter"] = "35";
$age["Ben"] = "37";
$age["Joe"] = "43";
echo "Peter is " . $age["Peter"] . " years old.";
foreach($age as $key=>$value){
echo "key=" . $key . " value=" . $value . "<br>";
}
?>
10.数组
基本格式
<?php
$cars = array("Volvo","BMW","Toyota");
echo "I like " . $cars[0] . "," . $cars[1] . " and" . $cars[2] . ".";
?>
在php中创建数组
在php中,array()函数用于创建数组
array();
或直接创建
$a = [1,2,3];//也可以创建数组
在php中有三种类型的数组:
- 数值数组: 带有数字id键的数组
- 关联数组: 带有指定的键的数组,每个键关联一个值(字典?)
- 多维数组: 包含一个或多个数组的数组
1.数值数组
有两种创建数值数组的方法:
- 自动分配id键
$cars = array("Volvo","BMW","Toyota");
- 人工分配id键
$cars = array();
$cars[0] = "Volvo";
$cars[1] = "BMW";
$cars[2] = "Toyota";
访问未存入数据的区域
<?php
$lists = array();
$lists[0] = "test1";
$lists[2] = "test2";
echo $lists[0];
echo $lists[1]; //警告,并生成空字符串
echo $lists[2];
echo $lists[3]; //警告,并生成空字符串
?>
2.关联数组
有两种创建关联数组的方法:
<?php
$age = array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
echo "Peter is " . $age["Peter"] . " years old.";
?>
<?php
$age=array();
$age["Peter"] = "35";
$age["Ben"] = "37";
$age["Joe"] = "43";
echo "Peter is " . $age["Peter"] . " years old.";
?>
11.类与对象
类
创建类
<?php
class Fruit {
public $name;
public $color;
function set_name($name){
$this->name = $name;
}
function get_name(){
return $this->name;
}
}
?>
类的实例化与调用方法
<?php
class Fruit {
public $name;
public $color;
function set_name($name){
$this->name = $name;
}
function get_name(){
return $this->name;
}
}
$apple = new Fruit();
$banana = new Fruit();
// 通过调用Fruit对象中的set_name方法来修改属性值
$apple->set_name("Apple");
$banana->set_name("Banana");
// 通过调用get_name方法来获取属性值
echo $apple->get_name();
echo "<br>";
echo $banana->get_name();
?>
静态方法
1.静态方法的创建与调用类名::方法名
<?php
class MathUtil {
// 定义一个静态方法
public static function add($a, $b) {
return $a + $b;
}
}
// 直接通过类名调用静态方法(不需要创建对象)
echo MathUtil::add(3, 5); // 输出 8
// 也可以通过对象调用(但不推荐)
$obj = new MathUtil();
echo $obj::add(10, 20); // 输出 30
2.静态属性的调用self::$属性名
<?php
class Counter {
// 定义静态属性(所有对象共享)
private static $count = 0;
// 定义静态方法:计数器加 1
public static function increment() {
self::$count++;
}
// 定义静态方法:获取当前计数
public static function getCount() {
return self::$count;
}
}
// 使用静态方法操作静态属性
Counter::increment();
Counter::increment();
echo Counter::getCount(); // 输出 2
Counter::increment();
echo Counter::getCount(); // 输出 3
魔术方法
1. __construct() 构造方法
对象被创建时自动执行。
<?php
class Demo {
public function __construct() {
echo "对象已创建!\n";
}
}
$obj = new Demo();
注意:在同一个类中只能声明一个构造方法,原因是,php不支持方法重载
2. __destruct() 析构方法
对象被销毁前自动执行。可以在一个类被销毁前完成一些功能,比如关闭文件、释放结果等。
<?php
class Demo {
public function __destruct() {
echo "对象被销毁!\n";
}
}
$obj = new Demo();
unset($obj); // 触发析构方法
3. __get() / __set()
访问不存在或不可访问的属性时触发。
<?php
class Demo
{
private $data = [];
public function __get($name)
{
return $this->data[$name] ?? "属性 {$name} 不存在\n";
}
public function __set($name, $value)
{
$this->data[$name] = $value;
echo "设置 {$name} = {$value}\n";
}
}
$obj = new Demo();
echo $obj->name; // 触发 __get
$obj->name = "Tom"; // 触发 __set
echo $obj->name; // 触发 __get
?>
4. __isset()
使用 isset() 或 empty() 判断属性时触发。
<?php
class Demo {
private $data = ["name" => "Tom"];
public function __isset($name) {
echo "检查属性 {$name} 是否存在\n";
return isset($this->data[$name]);
}
}
$obj = new Demo();
var_dump(isset($obj->name)); // 触发 __isset
5. __unset()
使用 unset() 删除属性时触发。
<?php
class Demo {
private $data = ["name" => "Tom"];
public function __unset($name) {
echo "删除属性 {$name}\n";
unset($this->data[$name]);
}
}
$obj = new Demo();
unset($obj->name); // 触发 __unset
6. __toString()
对象被当成字符串时触发。
<?php
class Demo {
public function __toString() {
return "这是一个 Demo 对象\n";
}
}
$obj = new Demo();
echo $obj; // 触发 __toString
7. __sleep()
对象被 serialize() 序列化时触发。
<?php
class Demo {
private $name = "Tom";
public function __sleep() {
echo "对象被序列化\n";
return ["name"]; // 返回需要序列化的属性
}
}
$obj = new Demo();
$ser = serialize($obj); // 触发 __sleep
echo $ser;
8. __wakeup()
对象被 unserialize() 反序列化时触发。
<?php
class Demo {
private $name;
public function __wakeup() {
echo "对象被反序列化\n";
}
}
$ser = 'O:4:"Demo":1:{s:6:"' . "\0" . 'Demo' . "\0" . 'name";s:3:"Tom";}';
$obj = unserialize($ser); // 触发 __wakeup
9. __call()
在对象中调用一个不可访问的方法时调用
function __call(string $function_name,array $arguments){
// 方法体
}
在 PHP 中,__call($name, $arguments) 的 方法签名是固定的,只能接收两个参数:
-
$name→ 被调用的方法名 -
$arguments→ 调用时传入的参数,无论多少个参数,都会被自动收集到一个数组里。
所以 不存在参数数量不一致的问题。
哪怕调用的时候传入 0 个、1 个、10 个参数,PHP 都不会报错,而是把这些参数打包成一个数组传给 $arguments。
<?php
class Demo {
public function __call($name, $arguments) {
echo "你调用的方法 '{$name}' 不存在!\n";
echo "传入的参数有:" . implode(", ", $arguments) . "\n";
}
}
$obj = new Demo();
// 调用一个不存在的方法
$obj->hello("world", 123);
作用:用__call()方法可以避免当调用的方法不存在时产生错误,而意外的导致程序终止
10. __callstatic()
当你调用 不存在的静态方法 时,PHP 会自动触发 __callStatic($name, $arguments)。与__call()方法类似
<?php
class Demo {
public static function __callStatic($name, $arguments) {
echo "你调用的静态方法 '{$name}' 不存在!\n";
echo "参数个数: " . count($arguments) . "\n";
echo "参数内容: " . implode(", ", $arguments) . "\n";
}
}
// 调用不存在的静态方法
Demo::hello("world", 123);

浙公网安备 33010602011771号