PHP学习:PHP基础

以.php作为后缀结尾的文件,由服务器解析和运行的语言。

一、语法

PHP 脚本可以放在文档中的任何位置。

PHP 脚本以 <?php 开始,以 ?> 结束。

php 复制代码
<!DOCTYPE html>
<html>
<body>

<h1>My first PHP page</h1>

<?php
echo "Hello World!";
?>

</body>
</html>

二、变量

PHP中无声明变量,$+变量名即为PHP的变量,在赋值的时候,自动创建变量。

php 复制代码
<?php
$txt="Hello world!";
$x=5;
$y=10.5;
?>

PHP 变量规则:

  • 变量以 $ 符号开始,后面跟着变量的名称
  • 变量名必须以字母或者下划线字符开始
  • 变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ )
  • 变量名不能包含空格
  • 变量名是区分大小写的($y 和 $Y 是两个不同的变量)

三、数据类型

1.String字符串

单行字符串

由双引号包裹的字符组成的序列。

php 复制代码
<?php 
$x = "Hello world!";
echo $x;
echo "<br>"; 
$x = 'Hello world!';
echo $x;
?>
字符串连接(并置运算符)

字符串的连接用并置运算符的' . '连接。

php 复制代码
<?php
$txt1="Hello world!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
?>
字符串查找(strpos()函数)

用来在目标字符串里查找子串,第一个参数是目标字符串,第二个参数是要查找的子串,返回子串第一次出现的位置。

php 复制代码
<?php
echo strpos("Hello world!","world");
?>
//返回6
字符串长度(strlen()函数)

返回字符串的长度。

php 复制代码
<?php
echo strlen("Hello world!");
?>
多行字符串EOF

定义多行字符串的方法,可以用来输出html代码块。

php 复制代码
<?php
$x= <<<EOF
        <h1>我的第一个标题</h1>
        <p>我的第一个段落。</p>
EOF;
// 结束需要独立一行且前后不能空格
echo $x
?>

注意事项:

  • EOF可以用任意大写字符代替,但要保证开始字符和结束字符相同。
  • 结束字符需要独立一行且前后不能空格
  • 位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在EOF中,变量不需要用连接符 . 或 , 来拼接。

2.Integer整型

整型可以用三种格式来指定:十进制十六进制( 以 0x 为前缀)八进制(前缀为 0)

php 复制代码
<?php 
$x = 5985;
var_dump($x);
echo "<br>"; 
$x = -345; // 负数 
var_dump($x);
echo "<br>"; 
$x = 0x8C; // 十六进制数
var_dump($x);
echo "<br>";
$x = 047; // 八进制数
var_dump($x);
?>

var_dump(变量名):可以输出变量的数据类型和值,还可以显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

php 复制代码
<?php
$a = array(1, 2, array("a", "b", "c"));
var_dump($a);
?>

3.Float浮点型

浮点数是带小数部分的数字,或是指数形式。

php 复制代码
<?php 
$x = 10.365;
var_dump($x);
echo "<br>"; 
$x = 2.4e3;
var_dump($x);
echo "<br>"; 
$x = 8E-5;
var_dump($x);
?>

4.Boolean布尔型

布尔型可以是 TRUE 或 FALSE,布尔型通常用于条件判断。

php 复制代码
$x=true;
$y=false;

5.Array数组

创建数组

使用函数 array()创建数组。

php 复制代码
<?php 
$cars=array("Volvo","BMW","Toyota");
var_dump($cars);
?>
数值数组

数值数组就是普通的一维数组

php 复制代码
<?php
$cars=array("Volvo","BMW","Toyota");
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
?>
关联数组

关联数组更像映射map数组**,需要指定键值和键名,键名要用符号 " => " 与键值连接。**

php 复制代码
<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
echo "Peter is " . $age['Peter'] . " years old.";
?>
多维数组

语法

php 复制代码
array (
    array (elements...),
    array (elements...),
    ...
)

多维数组就是一维数组里的元素还是一维数组。

php 复制代码
<?php
// 二维数组:
$cars = array
(
    array("Volvo",100,96),
    array("BMW",60,59),
    array("Toyota",110,100)
);
?>
php 复制代码
<?php
$sites = array
(
    "runoob"=>array
    (
        "菜鸟教程",
        "http://www.runoob.com"
    ),
    "google"=>array
    (
        "Google 搜索",
        "http://www.google.com"
    ),
    "taobao"=>array
    (
        "淘宝",
        "http://www.taobao.com"
    )
);
print("<pre>"); // 格式化输出数组
print_r($sites);
print("</pre>");
?>

遍历数组

count()函数:返回数组的长度

php 复制代码
<?php
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);
 
for($x=0;$x<$arrlength;$x++)
{
    echo $cars[$x];
    echo "<br>";
}
?>
数组排序
  • sort() - 对数组进行升序排列
  • rsort() - 对数组进行降序排列
  • asort() - 根据关联数组的值,对数组进行升序排列
  • ksort() - 根据关联数组的键,对数组进行升序排列
  • arsort() - 根据关联数组的值,对数组进行降序排列
  • krsort() - 根据关联数组的键,对数组进行降序排列
php 复制代码
<?php
	$cars=array("Volvo","BMW","Toyota");
    sort($cars);
?>

6.Object对象

使用class声明对象,内部要定义一个构造函数,在新建对象时候自动调用。

php 复制代码
<?php
class Car
{
  var $color;
  function __construct($color="green") {
    //构造函数
    $this->color = $color;
  }
  function what_color() {
    return $this->color;
  }
}
?>

7.Resource资源类型

**resource 是一种特殊变量,保存了到外部资源的一个引用。**常见资源数据类型有打开文件、数据库连接、图形画布区域等。

由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此将其它类型的值转换为资源没有意义。

使用 get_resource_type() 函数可以返回资源(resource)类型。

php 复制代码
<?php
$c = mysql_connect();
echo get_resource_type($c)."\n";
// 打印:mysql link

$fp = fopen("foo","w");
echo get_resource_type($fp)."\n";
// 打印:file

$doc = new_xmldoc("1.0");
echo get_resource_type($doc->doc)."\n";
// 打印:domxml document
?>

七、条件判断语句

if.......else条件语句

php 复制代码
<?php
$t=date("H");
if ($t<"10")
{
    echo "Have a good morning!";
}
elseif ($t<"20")
{
    echo "Have a good day!";
}
else
{
    echo "Have a good night!";
}
?>

switch条件语句

php 复制代码
<?php
$favcolor="red";
switch ($favcolor)
{
case "red":
    echo "你喜欢的颜色是红色!";
    break;
case "blue":
    echo "你喜欢的颜色是蓝色!";
    break;
case "green":
    echo "你喜欢的颜色是绿色!";
    break;
default:
    echo "你喜欢的颜色不是 红, 蓝, 或绿色!";
}
?>

八、循环

1.while循环

php 复制代码
<html>
<body>

<?php
$i=1;
while($i<=5)
{
    echo "The number is " . $i . "<br>";
    $i++;
}
?>

</body>
</html>

2.do....while循环

php 复制代码
<html>
<body>

<?php
$i=1;
do
{
    $i++;
    echo "The number is " . $i . "<br>";
}
while ($i<=5);
?>

</body>
</html>

3.for循环

php 复制代码
<?php
for ($i=1; $i<=5; $i++)
{
    echo "数字为 " . $i . PHP_EOL;
}
?>

4.foreach循环

语法:数值数组

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

php 复制代码
foreach ($array as $value)
{
    要执行代码;
}

案例:

php 复制代码
<?php
$x=array("Google","Runoob","Taobao");
foreach ($x as $value)
{
    echo $value . PHP_EOL;
   //PHP_EOL: 这是一个 PHP 内置的常量,表示特定操作系统下的换行符。
}
?>

语法:关联数组

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

php 复制代码
foreach ($array as $key => $value)
{
    要执行代码;
}

案例:

php 复制代码
<?php
$x=array(1=>"Google", 2=>"Runoob", 3=>"Taobao");
foreach ($x as $key => $value)
{
    echo "key  为 " . $key . ",对应的 value 为 ". $value . PHP_EOL;
}
?>

九、函数

1.自定义函数

语法:

php 复制代码
<?php
function functionName()
{
    // 要执行的代码
    return 返回值
}
?>

案例:

php 复制代码
<?php
function add($x,$y)
{
    $total=$x+$y;
    return $total;
}
 
echo "1 + 16 = " . add(1,16);
?>

2.isset函数

语法:

php 复制代码
bool isset( $var )

返回值:

isset() 返回一个布尔类型的值。

  • true :变量「已定义」
  • false:变量「未定义」或变量为 NULL 或 变量被 unset()

十、常量

定义常量define

语法:

php 复制代码
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )

case_insensitive:可选参数,如果设置为 TRUE,该常量则大小写不敏感,默认是大小写敏感的。

案例:

php 复制代码
<?php
// 区分大小写的常量名
define("GREETING", "欢迎访问 Runoob.com");
echo GREETING;    // 输出 "欢迎访问 Runoob.com"
echo '<br>';
echo greeting;   // 输出 "greeting",但是有警告信息,表示该常量未定义
?>

定义常量const

语法:

php 复制代码
const CONSTANT_NAME = "value";

案例:

php 复制代码
const SITE_URL = "https://www.runoob.com";
echo SITE_URL; // 输出 "https://www.runoob.com"

总结

这两种常量的定义方法在引用时候无需加$,因为其为常量不是变量。

十一、超级全局变量

超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用

变量名 解释
$_COOKIE 存储客户端的 Cookie 数据的全局数组
$_GET 接受所有以 get 方式发送的请求的全局数组
$_POST 接受所有以 post 方式发送请求的全局数组
$_REQUEST 用于收集来自 HTTP 请求的数据

1.$_GET

获取url问号后面的数据,在url里#是锚定位符,GET方法无法获取锚定位符后面的内容。

案例:

php 复制代码
<?php  
$name = $_GET['name']; // "John"  
$age = $_GET['age'];   // "25"  

echo "姓名: " . htmlspecialchars($name) . "<br>";  
echo "年龄: " . htmlspecialchars($age);  

//htmlspecialchars() 或 filter_input()可以避免SQL 注入和 XSS(跨站脚本攻击)
?>
php 复制代码
<?php
$q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : '';
if($q) {
        if($q =='RUNOOB') {
                echo '菜鸟教程<br>http://www.runoob.com';
        } else if($q =='GOOGLE') {
                echo 'Google 搜索<br>http://www.google.com';
        } else if($q =='TAOBAO') {
                echo '淘宝<br>http://www.taobao.com';
        }
} else {?><form action="" method="get"> 
    <input type="radio" name="q" value="RUNOOB" />Runoob
    <input type="radio" name="q" value="GOOGLE" />Google
    <input type="radio" name="q" value="TAOBAO" />Taobao
    <input type="submit" value="提交">
</form><?php
}
?>

2. $_POST

获取由POST方法提交的参数。

案例:

php 复制代码
<?php
$q = isset($_POST['q'])? $_POST['q'] : '';
if(is_array($q)) {
    $sites = array(
            'RUNOOB' => '菜鸟教程: http://www.runoob.com',
            'GOOGLE' => 'Google 搜索: http://www.google.com',
            'TAOBAO' => '淘宝: http://www.taobao.com',
    );
    foreach($q as $val) {
        // PHP_EOL 为常量,用于换行
        echo $sites[$val] . PHP_EOL;
    }
      
} else {?><form action="" method="post"> 
    <input type="checkbox" name="q[]" value="RUNOOB"> Runoob<br> 
    <input type="checkbox" name="q[]" value="GOOGLE"> Google<br> 
    <input type="checkbox" name="q[]" value="TAOBAO"> Taobao<br>
    <input type="submit" value="提交">
</form><?php
}
?>

设置Cookie

语法:

php 复制代码
setcookie(name, value, expire, path, domain);

参数说明:

  • name(必需):

这是 cookie 的名称。它是一个字符串,必须符合变量命名规则。

  • value(必需):

这是与 cookie 关联的值。它是一个字符串,表示你要存储在客户端的内容。

  • expire(可选):

这是 cookie 过期的时间。它是一个 Unix 时间戳(即从1970年1月1日到现在的秒

数),可以通过**time()**函数来获取当前的时间戳。如果设置为 0,cookie 会在浏

览器会话结束时过期;如果设置为将来的时间,则 cookie 会在指定的时间到期。

  • path(可选):

    • 这是 cookie 可用的路径。默认值是当前脚本的路径。设置此参数可以限制 cookie 的可用范围。例如,如果设置为 /,那么该 cookie 可以在整个域名下的所有路径中使用。
  • domain(可选):

    • 这是 cookie 可用的域名。可以用来设置 cookie 的作用域。默认情况下,cookie 将只在所发出的域名下有效。如果指定了子域名(例如 example.com),则 cookie 也可以在子域名(如 www.example.comsub.example.com)下使用。

案例:

setcookie() 函数用于设置 cookie,且setcookie() 函数必须位于 <html> 标签之前

php 复制代码
<?php
$expire=time()+60*60*24*30;
setcookie("user", "runoob", $expire);
?>

<html>
.....

获取Cookie的值

使用$_COOKIE超级全局数组来获取前面设定的Cookie值。

php 复制代码
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>

<?php
if (isset($_COOKIE["user"]))
    echo "欢迎 " . $_COOKIE["user"] . "!<br>";
else
    echo "普通访客!<br>";
?>

</body>
</html>

案例使用了isset函数来判断是否设置了Cookie

4. $_REQUEST

$_REQUEST 是 PHP 中的一个超全局数组,用于收集来自 HTTP 请求的数据。它包含了 $_GET$_POST 两个数组中传递的数据。使用 $_REQUEST 时,可以方便地获取这两种方式发送的请求参数。

案例:

php 复制代码
// 假设用户通过 GET 或 POST 请求传递了一个名为 "username" 的参数  
$username = $_REQUEST['username'];  

// 处理参数...  
echo "Hello, " . htmlspecialchars($username);

十二、面向对象(类)

十三、命名空间

1.定义命名空间

语法:

php 复制代码
<?php  
// 定义代码在 'MyProject' 命名空间中  
namespace MyProject;  
 
// ... 代码 ...  

案例: 单个文件多个命名空间(不推荐)

php 复制代码
<?php  
namespace MyProject;

const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }

namespace AnotherProject;

const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
?>  

案例: 单个文件多个命名空间(推荐)

php 复制代码
<?php
namespace MyProject {
    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function connect() { /* ... */  }
}

namespace AnotherProject {
    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function connect() { /* ... */  }
}
?>

当使用全局代码和命名空间代码混用时候,必须使用花括号{},并且HTML页面代码应该另写在一个不包含命名空间的文件里,通过require和include函数来引入

php 复制代码
<?php
namespace MyProject {

const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}

namespace { // 全局代码
session_start();
$a = MyProject\connect();
echo MyProject\Connection::start();
}
?>

2.子命名空间

相当于目录与子目录的关系

php 复制代码
<?php
namespace MyProject\Sub\Level{  //声明分层次的单个命名空间

    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function Connect() { /* ... */  }
}

?>

参考资料

PHP 教程 | 菜鸟教程 (runoob.com)

相关推荐
龙哥·三年风水7 小时前
群控系统服务端开发模式-应用开发-个人资料
分布式·php·群控系统
Dingww101111 小时前
梧桐数据库中的网络地址类型使用介绍分享
数据库·oracle·php
Genius Kim14 小时前
SpringCloud Sentinel 服务治理详解
spring cloud·sentinel·php
原机小子18 小时前
城镇保障性住房管理:SpringBoot系统解决方案
数据库·spring boot·php
kali-Myon19 小时前
NewStarCTF2024-Week5-Web&Misc-WP
前端·python·学习·mysql·web安全·php·web
DK七七20 小时前
当今陪玩系统小程序趋势,陪玩系统源码搭建后的适用于哪些平台
小程序·php·uniapp
tekin1 天前
vscode php Launch built-in server and debug, PHP内置服务xdebug调试,自定义启动参数配置使用示例
ide·vscode·php·launch.json·runtimeargs·php内置服务自定义参数
The_Ticker1 天前
PHP查询实时股票行情
开发语言·php·学习方法
y0ungsheep1 天前
CTF中的phar反序列化 [SWPU 2018]SimplePHP
运维·web安全·网络安全·php·代码规范
前端白袍2 天前
计算机网络:简述LAN口模式下NAT和代理的区别
网络·计算机网络·php