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)

相关推荐
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082855 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe5 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5