PHP基础学习第一篇

PHP的标识符

标准标识符

PHP语言自己的标示符,推荐使用,如果当前PHP标示符里面只有PHP代码,结束的标示符(?>)可以省略。

<?php
echo 'hello php';
?>
<!DOCTYPE html>
<html>
<p>hello world</p>
</html>
```php

```php
// 可以省略 ?>
<?php
echo 'hello php';

短标签风格

需要先打开php.ini配置文件,把 short_open_tag 改为 on,不建议使用

<?
echo 'hello php';
?>

ASP 风格

需要先打开php.ini配置文件,把 asp_tag 改为 on,不建议使用

<%
echo 'hello php';
%>

script 风格

模仿jsp的风格

<script language="php">
echo 'hello php';
</script>

分隔指令

在php中,语句分为控制语句和功能语句,其中控制语句可以不加分号,但是功能语句结尾必需加分号。

<?php

$name = 'li';
$age = 18;

function run() {
    echo 'run...';
}

run();
?>

注释

php的注释分为单行注释和多行注释,共有三种表示形式

// 单行注释

# 单行注释
# author: wmui
# date: 2019


/**
 * 多行注释
 * 多行注释
 * 多行注释
 */

混合模式

php的代码是不能写入到HTML中的,需要用PHP的标示符隔开,PHP代码只能在PHP文件中执行,不能写到其他语言文件中。但是html代码可以写到PHP文件中

<?php
$title = 'hello';
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title><?php echo $title; ?></title>
</head>
<body>
    
</body>
</html>

变量

变量是指可以存储变化的量(数据)的空间,可以变化的量是通过上下文来决定的(比如定义一个字符串,但是可以赋值为数值),所以称为“弱类型语言”。PHP中变量的声明是用“$”来进行定义的声明的,并且变量名是数字(0-9)、字母(a-zA-Z)、下划线组成的且不能以数字开头的定义方式。

$name = 'wmui';

可变变量

简单来说,可变变量就是一个变量的值是另一个变量的名。好处是减少变量的定义,节省内存空间。

$name = 'wmui';
$$name = 'wang';

echo $wmui; // wang

变量的传值方式

php变量的传值方式分为值传递和引用传递。

值传递

值传递表示的是在内存中复制一个变量的值,因此两个变量没有任何关系。

$name = 'wmui';
$name2 = $name;
echo $name, $name2; // wmui wmui

$name = 'haha';
echo $name, $name2; // haha wmui

引用传递

引用传递表示的是把一个变量的值的空间地址给另一个变量,这个时候的两个变量公用一个数据空间,指向同一个地址,两个变量值是有关系的

// 引用值传递

$name = 'wmui';
$name2 = &$name; // & 表示取址符

echo $name, $name2; // wmui wmui

// 当改变一个引用值时,两个值都会改变
$name = 'haha';
echo $name, $name2; // haha haha 


// 当删除一个引用值时,另一个值不受影响,因为本质上只是把指针切断了
unset($name);

echo $name, $name2; // 警告 haha 

变量作用域

php中作用域分为局部作用域、全局作用域和静态作用域。

局部作用域就是在函数内定义的作用域,其内部变量在函数外无法访问。全局作用域是在函数外定义的作用域,其变量在函数内无法访问。

// 全局
$age = 18;

function run() {
    // 局部
    $name = 'wmui';
}

echo $age; // 18
echo $name; // 报错

静态作用域

静态作用域也是在函数内定义的作用域,但是这个变量不会在函数运行完后自动销毁。

// run 函数结束后后,$age 会自动销毁,因此返回都是18
function run() {
    $age = 18;
    echo $age;
    $age++;
}

run(); // 18 
run(); // 18

// run 函数结束后后,$age 不会自动销毁,因此第二次会加1
function run2() {
    static $age = 18;
    echo $age;
    $age++;
}

run2(); // 18 
run2(); // 19

作用域转换

局部作用域和全局作用域可以互相转换,通过在函数内使用global关键字

$sex = 'boy';

function info() {
    // 局部访问全局
    global $name,$sex;

    $name = 'wmui';

    echo $name, $sex;
}

info(); // wmui boy

// 全局访问局部
echo $name; // wmui

// 注意:global $name='wmui';这种方式不行,即不能声明的时候赋值

全局作用域中的变量可以通过$GLOBALS获取

变量常用的几个函数

isset()

判断变量是否存在n,变量值为null或变量不存在时返回false,其他情况返回真。

$name='wmui';
var_dump($name, $age); // false

empty()

判断变量的值是否为空,以下情况都为空('', 0, null, false, array())

unset()

删除或销毁变量,亦可以删除数组中的某个元素。

注意:unset方法删除的是变量本身,不一定会删除变量值(要看这个值是否有被其他变量引用)

$name = 'wmui';
$name2 = &$name;

unset($name);

echo $name, $name2; // 警告 wmui

echo()

输出打印值,不能输出复合和特殊的数据类型的值

$name='wmui';
$age=18;
$arr=array(1,2,3);

echo $name, $age, $arr; // wmui 18

var_dump()

输出打印值、类型、长度。可以打印复合或特殊类型的值

$name='wmui';
$age=18;
$arr=array(1,2,3);

var_dump($name, $age, $arr); 
// string(4) "wmui" int(18) array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }

预定义变量

预定义变量是指PHP系统内置的提供给使用的变量,这个变量一般都是超全局变量。

超全局变量就是没有作用域的限制有的还可以跨页面的变量

$GLOBALS

PHP内置的可以自动获取当前页面中的所有变量的内容

$_SERVER

自动获取服务器和客户端的信息

echo '<table border=1>';
foreach ($_SERVER as $key => $value) {
    echo '<tr>';
    echo '<td>'.$key.'</td><td>'.$value.'</td>';
    echo '</tr>';
}
echo '</table>';
UNIQUE_IDXQ82wkE4ncFPaEvagK4LJQAAAAc
HTTP_HOSTlocalhost:8080
HTTP_CONNECTIONkeep-alive
HTTP_CACHE_CONTROLmax-age=0
HTTP_UPGRADE_INSECURE_REQUESTS1
HTTP_USER_AGENTMozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
HTTP_ACCEPTtext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
HTTP_REFERERhttp://localhost:8080/demo/
HTTP_ACCEPT_ENCODINGgzip, deflate, br
HTTP_ACCEPT_LANGUAGEzh-CN,zh;q=0.9,en;q=0.8
PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
LD_LIBRARY_PATH/opt/lampp/lib:/opt/lampp/lib
SERVER_SIGNATURE
SERVER_SOFTWAREApache/2.4.37 (Unix) OpenSSL/1.0.2q PHP/7.3.0 mod_perl/2.0.8-dev Perl/v5.16.3
SERVER_NAMElocalhost
SERVER_ADDR127.0.0.1
SERVER_PORT8080
REMOTE_ADDR127.0.0.1
DOCUMENT_ROOT/opt/lampp/htdocs
REQUEST_SCHEMEhttp
CONTEXT_PREFIX
CONTEXT_DOCUMENT_ROOT/opt/lampp/htdocs
SERVER_ADMINyou@example.com
SCRIPT_FILENAME/opt/lampp/htdocs/demo/t2.php
REMOTE_PORT59958
GATEWAY_INTERFACECGI/1.1
SERVER_PROTOCOLHTTP/1.1
REQUEST_METHODGET
QUERY_STRING
REQUEST_URI/demo/t2.php
SCRIPT_NAME/demo/t2.php
PHP_SELF/demo/t2.php
REQUEST_TIME_FLOAT1561278146.385
REQUEST_TIME1561278146

$_FILES

获取上传文件的信息

<?php 
//$_FILES获取文件的信息
echo '<pre>';
var_dump($_FILES['updata']);
move_uploaded_file($_FILES['updata']['tmp_name'], __DIR__ . '/t.jpg');
?>
 <!DOCTYPE html>
 <html lang="en">
 <head>
 	<meta charset="UTF-8">
 	<title>上传</title>
 </head>
 <body>
 	<form action="" method="post" enctype="multipart/form-data">
		<input type="file" name="updata">
		<input type="submit" value="上传">
 	</form>
 </body>
 </html>
array(5) {
  ["name"]=>
  string(6) "a2.jpg"
  ["type"]=>
  string(10) "image/jpeg"
  ["tmp_name"]=>
  string(25) "/opt/lampp/temp/phpLfYMWm"
  ["error"]=>
  int(0)
  ["size"]=>
  int(44810)
}

Name:图片的名称
Type:图片的类型
Tmp_name:文件的临时文件夹和临时名称
Error:错误信息
Size:文件的大小

$_GET

URL方式传递数据,格式为url?key=val&key2=val2&key3=val3

http://localhost:8080/demo/t2.php?username=wmui
<?php 
//$_FILES获取文件的信息
$user = $_GET['username']; // wmui
echo $user;
?>
 <!DOCTYPE html>
 <html lang="en">
 <head>
 	<meta charset="UTF-8">
 	<title></title>
 </head>
 <body>
 	<form action="" method="get">
		<input name="username">
		<input type="submit" value="提交">
 	</form>
 </body>
 </html>

$_POST

post表单形式或者ajax方式传递数据

<?php 
//$_FILES获取文件的信息
$user = $_POST['username']; // wmui
echo $user;
?>
 <!DOCTYPE html>
 <html lang="en">
 <head>
 	<meta charset="UTF-8">
 	<title></title>
 </head>
 <body>
 	<form action="" method="post">
		<input name="username">
		<input type="submit" value="提交">
 	</form>
 </body>
 </html>

$_REQUEST

默认包含了$_GET $_POST $_COOKIE的数组

常量

常量一旦定义,常量值和常量名是不能改变和销毁的,而且常量名不能重复

常量的定义方式有两种:define(name, value) 和 const 关键字。在php7.x中,define()支持定义复合数据,低版本只支持定义简单值。const在5.x中被引入,支持简单值和复合值的定义


define(HOST, '127.0.0.1');
const PI = '3.14';
CONST ARR = array(1,2,3);

// 7.x
define(ARR2, array(1,2,3));

预定义常量

预定义常量又称魔术常量

posted @ 2019-06-23 17:07:04 浏览(236) PHP

avatar