PHP快速入门

PHP

还是老样子,一个喜欢分享的懒鬼,可以看着文档学,写错了、不对的、欢迎各位看官老爷多多指教

【金山文档 | WPS云文档】 PHP
https://kdocs.cn/l/cuHWdR3prSfN

花了1天实现基础入门。后续继续更进php相关内容。(sql、xml、ajax)

简介

PHP:Hypertext Preprocessor,即"PHP:超文本预处理器"是一种通用开源脚本语言。

PHP 脚本在服务器上执行。

PHP 文件

PHP 文件可包含文本、HTML、JavaScript代码和 PHP 代码

PHP 代码在服务器上执行,结果以纯 HTML 形式返回给浏览器

PHP 文件的默认文件扩展名是 .php

PHP 能做什么

PHP 可以生成动态页面内容

PHP 可以创建、打开、读取、写入、关闭服务器上的文件

PHP 可以收集表单数据

PHP 可以发送和接收 cookies

PHP 可以添加、删除、修改您的数据库中的数据

PHP 可以限制用户访问您的网站上的一些页面

PHP 可以加密数据

PHP 语法

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

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

PHP 文件的默认文件扩展名是 .php。

PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码。

向浏览器输出文本 "Hello World!":

<!DOCTYPE html>

<html>

<body>

<h1>My first PHP page</h1>

<?php

echo "Hello World!";

?>

</body>

</html>

PHP 变量

变量是用于存储信息的"容器"

PHP 变量规则:

变量以 $ 符号开始,后面跟着变量的名称

变量名必须以字母或者下划线字符开始

变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ )

变量名不能包含空格

变量名是区分大小写的($y 和 $Y 是两个不同的变量)

不必向 PHP 声明该变量的数据类型。PHP 会根据变量的值,自动把变量转换为正确的数据类型。

PHP 有四种不同的变量作用域:

Local;global;static;parameter

Static 作用域

当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。

0 1 2

参数作用域

参数是通过调用代码将值传递给函数的局部变量。

echo 和 print 语句

echo - 可以输出一个或多个字符串

print - 只允许输出一个字符串,返回值总为 1

echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。

PHP EOF(heredoc) 使用说明

PHP EOF(heredoc)是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。

使用概述:

1. 必须后接分号,否则编译通不过。

2. EOF可以用任意其它字符代替,只需保证结束标识与开始标识一致。

3. 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。

4. 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。

5. 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与q和qq的用法。

PHP 常量

PHP 中的常量是指一旦定义后其值不能被改变的标识符。

常量值被定义后,在脚本的其他任何地方都不能被改变。

常量可以用 define() 函数或 const 关键字来定义。

常量的特性

不变性: 常量一旦定义,其值不能改变。

全局作用域: 常量在定义后,可以在整个脚本的任何地方使用,无需使用 global 关键 字。

数据类型: 常量的值可以是标量数据类型(如布尔值、整数、浮点数、字符串)或数组 (PHP 7 及以上版本)。

区分大小写: 常量名称默认是区分大小写的。如果需要定义大小写不敏感的常量,可以在 define() 函数的第三个参数设置为 true。

常量是一个简单值的标识符,该值在脚本中不能改变。

一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。

注意: 常量在整个脚本中都可以使用。

设置 PHP 常量

设置常量,使用 define() 函数,函数语法如下:

bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )

该函数有三个参数:

name:必选参数,常量名称,即标志符。

value:必选参数,常量的值。

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

注意:自 PHP 7.3.0 开始,定义不区分大小写的常量已被弃用。从 PHP 8.0.0 开始,只有 false 是可接受的值,传递 true 将产生一个警告。

PHP 数据类型

PHP 字符串

一个字符串是一串字符的序列,就像 "Hello world!"。

你可以将任何文本放在单引号和双引号中

$x = "Hello world!";

$x = 'Hello world!';

并置运算符

在 PHP 中,只有一个字符串运算符。

并置运算符 (.) 用于把两个字符串值连接起来。

$txt1="Hello world!";

$txt2="What a nice day!";

echo $txt1 . " " . $txt2;

Hello world! What a nice day!

strlen() 函数

有时知道字符串值的长度是很有用的。

strlen() 函数返回字符串的长度(字节数)。

strpos() 函数

strpos() 函数用于在字符串内查找一个字符或一段指定的文本。

如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。

<?php
echo strpos("Hello world!","world");
?>

6

PHP 整型

整数是一个没有小数的数字。

整数规则:

整数必须至少有一个数字 (0-9)

整数不能包含逗号或空格

整数是没有小数点的

整数可以是正数或负数

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

在以下实例中我们将测试不同的数字。

PHP 浮点型

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

在以下实例中我们将测试不同的数字。 PHP var_dump() 函数返回变量的数据类型和值:

PHP 布尔型

布尔型可以是 TRUE 或 FALSE。

$x=true;

$y=false;

布尔型通常用于条件判断。

PHP 数组

数组可以在一个变量中存储多个值。

在以下实例中创建了一个数组, 然后使用 PHP var_dump() 函数返回数组的数据类型和值

$cars=array("Volvo","BMW","Toyota");

var_dump($cars);

数值数组 - 带有数字 ID 键的数组

自动分配 ID 键(ID 键总是从 0 开始):

$cars=array("Volvo","BMW","Toyota");

人工分配 ID 键:

$cars[0]="Volvo";

$cars[1]="BMW";

$cars[2]="Toyota";

count() 函数用于返回数组的长度(元素的数量),并进行遍历

$cars=array("Volvo","BMW","Toyota"); echo count($cars);

for($x=0;$x<$arrlength;$x++) { echo $cars[$x]; echo "<br>"; }

关联数组 - 带有指定的键的数组,每个键关联一个值

关联数组是使用您分配给数组的指定的键的数组。

这里有两种创建关联数组的方法:

$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");

$age['Peter']="35";

$age['Ben']="37";

$age['Joe']="43";

遍历

$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");

foreach($age as $x=>$x_value)

{

    echo "Key=" . $x . ", Value=" . $x_value;

    echo "<br>";

}

多维数组 - 包含一个或多个数组的数组

数组排序函数

sort() - 对数组进行升序排列

rsort() - 对数组进行降序排列

asort() - 根据关联数组的值,对数组进行升序排列

ksort() - 根据关联数组的键,对数组进行升序排列

arsort() - 根据关联数组的值,对数组进行降序排列

krsort() - 根据关联数组的键,对数组进行降序排列

PHP 对象

对象数据类型也可以用于存储数据。

在 PHP 中,对象必须声明。

首先,你必须使用class关键字声明类对象。类是可以包含属性和方法的结构。

然后我们在类中定义数据类型,然后在实例化的类中使用数据类型:

PHP NULL 值

NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。

NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别。

可以通过设置变量值为 NULL 来清空变量数据:

$x="Hello world!";

$x=null;

var_dump($x);

PHP 资源类型

PHP 资源 resource 是一种特殊变量,保存了到外部资源的一个引用。

常见资源数据类型有打开文件、数据库连接、图形画布区域等。

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

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

get_resource_type(resource $handle): string

此函数返回一个字符串,用于表示传递给它的 resource 的类型。如果参数不是合法的 resource,将产生错误。

类型比较

松散比较:使用两个等号 == 比较,只比较值,不比较类型。

严格比较:用三个等号 === 比较,除了比较值,也比较类型。

例如,"42" 是一个字符串而 42 是一个整数。FALSE 是一个布尔值而 "FALSE" 是一个字符串。

运算符

运算符

名称

描述

实例

结果

x + y

x 和 y 的和

2 + 2

4

x - y

x 和 y 的差

5月2日

3

x * y

x 和 y 的积

5 * 2

10

x / y

x 和 y 的商

5月15日

3

x % y

模(除法的余数)

x 除以 y 的余数

5 % 2

1

10 % 8

2

10 % 2

0

-x

设置负数

取 x 的相反符号

<?php

-2

$x = 2;

echo -$x;

?>

~x

取反

x 取反,按二进制位进行"取反"运算。运算规则:

<?php

-3

~1=-2;   

$x = 2;

~0=-1;

echo ~$x;

?>

a . b

并置

连接两个字符串

"Hi" . "Ha"

HiHa

运算符

等同于

描述

x = y

x = y

左操作数被设置为右侧表达式的值

x += y

x = x + y

x -= y

x = x - y

x *= y

x = x * y

x /= y

x = x / y

x %= y

x = x % y

模(除法的余数)

a .= b

a = a . b

连接两个字符串

运算符

名称

描述

实例

x == y

等于

如果 x 等于 y,则返回 true

5==8 返回 false

x === y

绝对等于

如果 x 等于 y,且它们类型相同,则返回 true

5==="5" 返回 false

x != y

不等于

如果 x 不等于 y,则返回 true

5!=8 返回 true

x <> y

不等于

如果 x 不等于 y,则返回 true

5<>8 返回 true

x !== y

不绝对等于

如果 x 不等于 y,或它们类型不相同,则返回 true

5!=="5" 返回 true

x > y

大于

如果 x 大于 y,则返回 true

5>8 返回 false

x < y

小于

如果 x 小于 y,则返回 true

5<8 返回 true

x >= y

大于等于

如果 x 大于或者等于 y,则返回 true

5>=8 返回 false

x <= y

小于等于

如果 x 小于或者等于 y,则返回 true

5<=8 返回 true

运算符

名称

描述

x + y

集合

x 和 y 的集合

x == y

相等

如果 x 和 y 具有相同的键/值对,则返回 true

x === y

恒等

如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true

x != y

不相等

如果 x 不等于 y,则返回 true

x <> y

不相等

如果 x 不等于 y,则返回 true

x !== y

不恒等

如果 x 不等于 y,则返回 true

运算符

名称

描述

实例

x and y

如果 x 和 y 都为 true,则返回 true

x=6

y=3

(x < 10 and y > 1) 返回 true

x or y

如果 x 和 y 至少有一个为 true,则返回 true

x=6

y=3

(x==6 or y==5) 返回 true

x xor y

异或

如果 x 和 y 有且仅有一个为 true,则返回 true

x=6

y=3

(x==6 xor y==3) 返回 false

x && y

如果 x 和 y 都为 true,则返回 true

x=6

y=3

(x < 10 && y > 1) 返回 true

x || y

如果 x 和 y 至少有一个为 true,则返回 true

x=6

y=3

(x==5 || y==5) 返回 false

! x

如果 x 不为 true,则返回 true

x=6

y=3

!(x==y) 返回 true

组合比较符(PHP7+)

PHP7+ 支持组合比较符(combined comparison operator)也称之为太空船操作符,符号为 <=>。组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。

语法格式如下:

$c = $a <=> $b;

如果 $a > $b, 则 $c 的值为 1。

如果 $a == $b, 则 $c 的值为 0。

如果 $a < $b, 则 $c 的值为 -1。

<?php

// 整型 // 浮点型 // 字符串

echo 1 <=> 1; // 0 echo 1.5 <=> 1.5; // 0 echo "a" <=> "a"; // 0

echo 1 <=> 2; // -1 echo 1.5 <=> 2.5; // -1 echo "a" <=> "b"; // -1

echo 2 <=> 1; // 1 echo 2.5 <=> 1.5; // 1 echo "b" <=> "a"; // 1

?>

优先级

<?php

// 优先级: &&  >  =  >  and

// 优先级: ||  >  =  >  or

$a = 3;

$b = false;

$c = $a or $b;

var_dump($c);          // 这里的 $c 为 int 值3,而不是 boolean 值 true

$d = $a || $b;

var_dump($d);          //这里的 $d 就是 boolean 值 true

?>

条件语句

if 语句 - 在条件成立时执行代码

if...else 语句 - 在条件成立时执行一块代码,条件不成立时执行另一块代码

if...elseif....else 语句 - 在若干条件之一成立时执行一个代码块

switch 语句 - 在若干条件之一成立时执行一个代码块

Switch

switch (expression) {

    case value1:        // 代码块1

        break;

    default:        // 如果没有匹配的值

}

参数说明:

expression 是要被比较的表达式。

case value: 是可能的值,如果 expression 的值等于某个 case 的值,就执行相应的代码块。

break; 用于终止 switch 语句,防止继续执行下一个 case。

default: 是可选的,用于指定当没有匹配的 case 时执行的代码块。

代码是正确示范,结果将是只会输出:这里是a。倘若你忘敲了 case 'a',case 'b',case 'c' 后的 break,结果将是将代码中的每一条输出语句都输出。倘若你只敲了 case 'c' 后的 break, 结果将会是输出包含 case 'c' 之前的所有输出语句。

超级全局变量

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

$GLOBALS

$GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。

$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

$x = 75; $y = 25;

function addition() { $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; }

addition(); echo $z;

$_SERVER

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。

echo $_SERVER['PHP_SELF'];

echo $_SERVER['SERVER_NAME'];

echo $_SERVER['HTTP_HOST'];

echo $_SERVER['HTTP_REFERER'];

echo $_SERVER['HTTP_USER_AGENT'];

echo $_SERVER['SCRIPT_NAME'];

元素/代码

描述

$_SERVER['PHP_SELF']

当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF'] 将得到 /test.php/foo.bar。__FILE__ 常量包含当前(例如包含)文件的完整路径和文件名。 从 PHP 4.3.0 版本开始,如果 PHP 以命令行模式运行,这个变量将包含脚本名。之前的版本该变量不可用。

$_SERVER['GATEWAY_INTERFACE']

服务器使用的 CGI 规范的版本;例如,"CGI/1.1"。

$_SERVER['SERVER_ADDR']

当前运行脚本所在的服务器的 IP 地址。

$_SERVER['SERVER_NAME']

当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定

$_SERVER['SERVER_SOFTWARE']

服务器标识字符串,在响应请求时的头信息中给出。 (如:Apache/2.2.24)

$_SERVER['SERVER_PROTOCOL']

请求页面时通信协议的名称和版本。例如,"HTTP/1.0"。

$_SERVER['REQUEST_METHOD']

访问页面使用的请求方法;例如,"GET", "HEAD","POST","PUT"。

$_SERVER['REQUEST_TIME']

请求开始时的时间戳。从 PHP 5.1.0 起可用。 (如:1377687496)

$_SERVER['QUERY_STRING']

query string(查询字符串),如果有的话,通过它进行页面访问。

$_SERVER['HTTP_ACCEPT']

当前请求头中 Accept: 项的内容,如果存在的话。

$_SERVER['HTTP_ACCEPT_CHARSET']

当前请求头中 Accept-Charset: 项的内容,如果存在的话。例如:"iso-8859-1,*,utf-8"。

$_SERVER['HTTP_HOST']

当前请求头中 Host项的内容,如果存在的话。

$_SERVER['HTTP_REFERER']

引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。)

$_SERVER['HTTPS']

如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值。

$_SERVER['REMOTE_ADDR']

浏览当前页面的用户的 IP 地址。

$_SERVER['REMOTE_HOST']

浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的 REMOTE_ADDR。

$_SERVER['REMOTE_PORT']

用户机器上连接到 Web 服务器所使用的端口号。

$_SERVER['SCRIPT_FILENAME']

当前执行脚本的绝对路径。

$_SERVER['SERVER_ADMIN']

该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。(如:someone@runoob.com)

$_SERVER['SERVER_PORT']

Web 服务器使用的端口。默认值为 "80"。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。

$_SERVER['SERVER_SIGNATURE']

包含了服务器版本和虚拟主机名的字符串。

$_SERVER['PATH_TRANSLATED']

当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。

$_SERVER['SCRIPT_NAME']

包含当前脚本的路径。这在页面需要指向自己时非常有用。__FILE__ 常量包含当前脚本(例如包含文件)的完整路径和文件名。

$_SERVER['SCRIPT_URI']

URI 用来指定要访问的页面。例如 "/index.html"。

$_REQUEST

用于收集HTML表单提交的数据。

以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 "Submit" 按钮提交表单数据时, 表单数据将发送至<form>标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_REQUEST 来收集表单中的 input 字段数据:

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">

Name: <input type="text" name="fname">

<input type="submit">

</form>

<?php

$name = $_REQUEST['fname'];

echo $name;

?>

$_POST

被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"。

以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 "Submit" 按钮提交表单数据时, 表单数据将发送至<form>标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_POST 来收集表单中的 input 字段数据:

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">

Name: <input type="text" name="fname">

<input type="submit">

</form>

<?php

$name = $_POST['fname'];

echo $name;

?>

$_GET

被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。

$_GET 也可以收集URL中发送的数据。

假定我们有一个包含参数的超链接HTML页面:

<html>

<body>

<a href="test_get.php?subject=PHP&web=runoob.com">Test $GET</a>

</body>

</html>

当用户点击链接 "Test $GET", 参数 "subject" 和 "web" 将发送至"test_get.php",你可以在 "test_get.php" 文件中使用 $_GET 变量来获取这些数据。

<?php

echo "Study " . $_GET['subject'] . " @ " . $_GET['web'];

?>

$_FILES

$_ENV

$_COOKIE

$_SESSION

循环

在您编写代码时,您经常需要让相同的代码块一次又一次地重复运行。我们可以在代码中使用循环语句来完成这个任务。

在 PHP 中,提供了下列循环语句:

while - 只要指定的条件成立,则循环执行代码块

<?php

$i=1;

while($i<=5){echo "The number is " . $i . "<br>";

    $i++;}

?>

do...while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环

<?php

$i=1;

do

{

    $i++;

    echo "The number is " . $i . "<br>";

}

while ($i<=5);

?>

for - 循环执行代码块指定的次数

<?php

for ($i=1; $i<=5; $i++)

{

    echo "数字为 " . $i . PHP_EOL;

}

?>

foreach - 根据数组中每个元素来循环代码块

<?php

$x=array("Google","Runoob","Taobao");

foreach ($x as $value)

{

    echo $value . PHP_EOL;

}

?>

<?php

$x=array(1=>"Google", 2=>"Runoob", 3=>"Taobao");

foreach ($x as $key => $value)

{

    echo "key  为 " . $key . ",对应的 value 为 ". $value . PHP_EOL;

}

?>

函数

函数是通过调用函数来执行的。

语法

<?php

function functionName(){   // 要执行的代码 }

?>

PHP 函数准则:

函数的名称应该提示出它的功能

函数名称以字母或下划线开头(不能以数字开头)

参数传递

function writeName($fname,$punctuation)

{

    echo $fname . " Refsnes" . $punctuation . "<br>";

}

echo "My name is ";

writeName("Kai Jim",".");

echo "My sister's name is ";

writeName("Hege","!");

echo "My brother's name is ";

writeName("Ståle","?");

Return

function add($x,$y)

{

    $total=$x+$y;

    return $total;

}

echo "1 + 16 = " . add(1,16);

变量函数

变量函数是指在 PHP 中,将一个变量作为函数名来调用的函数。

变量函数可以让我们在运行时动态地决定调用哪个函数。

function foo() {    echo "In foo()<br />\n";}

function bar($arg = ''){    echo "In bar(); argument was '$arg'.<br />\n";}

function echoit($string){    echo $string;}

$func = 'foo';

$func();        // 调用 foo()

$func = 'bar';

$func('test');  // 调用 bar()

$func = 'echoit';

$func('test');  // 调用 echoit()

调用一个对象

class Foo

{

    function Variable()

    {

        $name = 'Bar';

        $this->$name(); // 调用 Bar() 方法

    }

    function Bar()

    {

        echo "This is Bar";

    }

}

$foo = new Foo();

$funcname = "Variable";

$foo->$funcname();  // 调用 $foo->Variable()

魔术常量

PHP 向它运行的任何脚本提供了大量的预定义常量。

不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。

有八个魔术常量它们的值随着它们在代码中的位置改变而改变。

这些特殊的常量不区分大小写

__LINE__

文件中的当前行号。

<?php

echo '这是第 " '  . __LINE__ . ' " 行';

?>

这是第 “ 2 ” 行

__FILE__

文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。

自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径

echo '该文件位于 " '  . __FILE__ . ' " ';

该文件位于 “ E:\wamp\www\test\index.php ”

__DIR__

文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。

它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。

<?php

echo '该文件位于 " '  . __DIR__ . ' " ';

?>

该文件位于 “ E:\wamp\www\test ”

__FUNCTION__

函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

<?php

function test() {

     echo  '函数名为:' . __FUNCTION__ ;

}

test();

?>

函数名为:test

__CLASS__

类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。

在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。

<?php

class test {

    function _print() {

        echo '类名为:'  . __CLASS__ . "<br>";

        echo  '函数名为:' . __FUNCTION__ ;

    }

}

$t = new test();

$t->_print();

?>

类名为:test

函数名为:_print

__TRAIT__

Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。

Trait 名包括其被声明的作用区域(例如 Foo\Bar)。

从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。

<?php

class Base {

    public function sayHello() {

        echo 'Hello ';

    }

}

trait SayWorld {

    public function sayHello() {

        parent::sayHello();

        echo 'World!';

    }

}

class MyHelloWorld extends Base {

    use SayWorld;

}

$o = new MyHelloWorld();

$o->sayHello();

?>

Hello World!

__METHOD__

类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

<?php

function test() {

    echo  '函数名为:' . __METHOD__ ;

}

test();

?>

函数名为:test

__NAMESPACE__

当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

<?php

namespace MyProject;

echo '命名空间为:"', __NAMESPACE__, '"'; // 输出 "MyProject"

?>

命名空间为:"MyProject"

命名空间namespace

1.用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。

2.为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

namespace MyProject

namespace MyProject\Sub\Level;  子命名空间

三种方式引用:

非限定名称,或不包含前缀的类名称

限定名称,或包含前缀的名称

完全限定名称,或包含了全局前缀操作符的名称

namespace关键字和__NAMESPACE__常量

常量__NAMESPACE__的值是包含当前命名空间名称的字符串。在全局的,不包括在任何命名空间中的代码,它包含一个空的字符串。

namespace MyProject;

echo '"', __NAMESPACE__, '"';

//动态创建

function get($classname)

{   $a = __NAMESPACE__ . '\\' . $classname;

    return new $a;}

别名/导入

使用use操作符导入/使用别名

use My\Full\Classname as Another;

use My\Full\Classname as Another, My\Full\NSname;

名称解析

对完全限定名称的函数,类和常量的调用在编译时解析。

例如 new \A\B 解析为类 A\B。

所有的非限定名称和限定名称(非完全限定名称)根据当前的导入规则在编译时进行转换。例如,如果命名空间 A\B\C 被导入为 C,那么对 C\D\e() 的调用就会被转换为 A\B\C\D\e()。

在命名空间内部,所有的没有根据导入规则转换的限定名称均会在其前面加上当前的命名空间名称。例如,在命名空间 A\B 内部调用 C\D\e(),则 C\D\e() 会被转换为 A\B\C\D\e() 。

非限定类名根据当前的导入规则在编译时转换(用全名代替短的导入名称)。

例如,如果命名空间 A\B\C 导入为C,则 new C() 被转换为 new A\B\C() 。

在命名空间内部(例如A\B),对非限定名称的函数调用是在运行时解析的。

例如对函数 foo() 的调用是这样解析的:

在当前命名空间中查找名为 A\B\foo() 的函数

尝试查找并调用 全局(global) 空间中的函数 foo()

在命名空间(例如A\B)内部对非限定名称或限定名称类(非完全限定名称)的调用是在运行时解析的。

面向对象

面向对象(Object-Oriented,简称 OO)是一种编程思想和方法,它将程序中的数据和操作数据的方法封装在一起,形成"对象",并通过对象之间的交互和消息传递来完成程序的功能。面向对象编程强调数据的封装、继承、多态和动态绑定等特性,使得程序具有更好的可扩展性、可维护性和可重用性。

三个主要特性

封装(Encapsulation):

指将对象的属性和方法封装在一起,使得外部无法直接访问和修改对象的内部状态。通过使用访问控制修饰符(public、private、protected)来限制属性和方法的访问权限,从而实现封装。

继承(Inheritance):

指可以创建一个新的类,该类继承了父类的属性和方法,并且可以添加自己的属性和方法。通过继承,可以避免重复编写相似的代码,并且可以实现代码的重用。

多态(Polymorphism):

指可以使用一个父类类型的变量来引用不同子类类型的对象,从而实现对不同对象的统一操作。多态可以使得代码更加灵活,具有更好的可扩展性和可维护性。在 PHP 中,多态可以通过实现接口(interface)和使用抽象类(abstract class)来实现。

相关内容

定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。

对象

类的实例。

成员变量

定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类 被实例化为对象后,该变量即可成为对象的属性。

成员函数

定义在类的内部,可用于访问对象的数据。

继承

继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和 实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类 所定义的内容作为自己的内容,并加入若干新的内容。

父类

一个类被其他类继承,可将该类称为父类,或基类,或超类。

子类

一个类继承其他类称为子类,也可称为派生类。

多态

多态性是指相同的函数或方法可作用于多种类型的对象上并获得不同的结果。不同的对 象,收到同一消息可以产生不同的结果,这种现象称为多态性。

重载

简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不 同参数的函数或者方法之间,互相称之为重载函数或者方法。

抽象性

抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就 是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类 的划分都是主观的,但必须与具体的应用有关。

封装

封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单 元内。

构造函数

主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一 起使用在创建对象的语句中。

析构函数

析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函 数已调用完毕),系统自动执行析构函数。析构函数往往用来做"清理善后" 的工作(例 如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。

代码(和C++的其实差别不大)

写个类

<?php

class Site {

  var $url;

  var $title;

  function setUrl($par){

     $this->url = $par;  }

  function getUrl(){

     echo $this->url . PHP_EOL;  }

  function setTitle($par){

     $this->title = $par;  }

  function getTitle(){

     echo $this->title . PHP_EOL;}

}

$runoob = new Site; $taobao = new Site; $google = new Site;

$runoob->setTitle( "菜鸟教程" );

$taobao->setTitle( "淘宝" );

$google->setTitle( "Google 搜索" );

$runoob->setUrl( 'www.runoob.com' );

$taobao->setUrl( 'www.taobao.com' );

$google->setUrl( 'www.google.com' );

$runoob->getTitle(); $taobao->getTitle(); $google->getTitle();

$runoob->getUrl(); $taobao->getUrl(); $google->getUrl();

?>

构造---析构

class MyDestructableClass {

   function __construct() {

       print "构造函数\n";

       $this->name = "MyDestructableClass"; }

   function __destruct() {

       print "销毁 " . $this->name . "\n";}

}

$obj = new MyDestructableClass();

访问控制

接口

使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。

接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。

接口中定义的所有方法都必须是公有,这是接口的特性。

要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。

抽象类

任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。

定义为抽象的类不能被实例化。

被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。

继承一个抽象类的时候,子类必须定义父类中的所有抽象方法

Static 关键字

声明类属性或方法为 static(静态),就可以不实例化类而直接访问。

静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。

由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。

静态属性不可以由对象通过 -> 操作符来访问。

Final 关键字

PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值