PHP学习记录
对于语言类的学习,选择好一门你感兴趣的语言种类,去学精它,语言不在多,而在精。
C++、C语言这些术语强类型语言,较难。这些语言,大家至少掌握一门。
java、python、php、js、jsp、GO、。。。
HTML、CSS、XML。。。SQL。。。
PHP
中文无法识别,和php版本相关,切换php版本查看问题;
PHP简介
- PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言。
- PHP 脚本在服务器上执行。(包含数据库、中间件)
- PHP 文件可包含文本、HTML、JavaScript代码和 PHP 代码
- PHP 代码在服务器上执行,结果以纯 HTML 形式返回给浏览器
- PHP 文件的默认文件扩展名是 ".php"(.html .js .css .py .java)
工具
操作系统windows,linux
编译环境:安装phpstudy(包含Apache、PHP、MySql)
开发编程Sublime Text
环境准备
首先大家1、打开笔记本;2、打开PHPstudy,并开启Apachue;3、打开Sublime TEXT;
新建文件夹php并用Sublime打开(文件的名字不能是中文,也不能有空格)
保存位置 : D:phpstudy_proWWWphp
CTRL+S保存并命名,保存位置在www/php文件下;php1.php
直接通过浏览器打开,这里的代码是不能直接翻译,会以源码的形式直接显示;
谷歌:
火狐:右击源码显示
编译php
如果想看到编译后的结果,就必须加上我们的php的编译器才可以;
1、打开phpstudy
2、完成上一步之后,我们会发现,php文件夹中多了两个配置文件;
3、在浏览器上输入,127.0.0.1
会显示:
如果没有以上显示
3、然后点击php1.php
会显示
翻译结果
文件源码
翻译后
PHP语言
PHP脚本以结束
可以单独使用
<?php echo "hello world" ?>
可以嵌入到HTML中
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>这是php第一页</h1>
<?php echo "hello world!"; ?>
</body>
</html>
注释
html的多行注释
php的多行注释 /* */
单行注释:# 、//
变量
-
变量以 $ 符号开始,后面跟着变量的名称
-
变量名必须以字母或者下划线字符开始
-
变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
-
变量名不能包含空格
-
变量名是区分大小写的($y 和 $Y 是两个不同的变量)
<?php $x=3; $y=4; $z=$x+$y; echo $z; ?> <?php $txt="Hello world!"; $x=5; $y=10.5; ?> #字母必须要双引号,数字都可以 #PHP 是一门弱类型语言 #在上面的实例中,我们注意到,不必向 PHP 声明该变量的数据类型。 #PHP会根据变量的值,自动把变量转换为正确的数据类型。 #在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称。 <?php $x='3'; $y="10"; $z=$x+$y; echo $z; ?>
案例:局部和全局变量
<?php $x=5; function Test() { $y=107; echo "<p>测试函数变量:</p>"; echo "$y"; echo "<br>"; echo "$x"; } Test(); echo "$y"; echo "<br>"; echo "$x"; ?>
#global 关键字用于函数内访问全局变量。 #在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字: <?php $x=5; function Test() { global $x; $y=107; echo "<p>测试函数变量:</p>"; echo "$y"; echo "<br>"; echo "$x"; echo "<br>"; } Test(); echo "$y"; echo "<br>"; echo "$x"; ?>
输出函数echo和print的区别
echo 和 print 区别:
- echo - 可以输出一个或多个字符串
- print - 只允许输出一个字符串
提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。
#下面的实例演示了如何使用 echo 命令输出字符串(字符串可以包含 HTML 标签):
<?php
echo "<h1>这是php第一页</h1>";
echo "hello world<br>";
echo "hello","world","nihao","汉字";
#echo - 可以输出一个或多个字符串
print "<h1>这是php第一页</h1>";
print "hello world<br>";
print "hello";
#print - 只允许输出一个字符串
?>
<?php
$x="学习 php";
$y="caichuanqi.comp";
$z=array("cai","chuan","qi");
echo $x;
echo "<br>";
echo "在 $y 学习 PHP ";
echo "<br>";
echo "输出值 $z[1]<br>";
print $x;
print "<br>";
print "在 $y 学习 PHP ";
print "<br>";
print "输出值 {$z[2]}";
?>
数据类型
String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), NULL(空值)。
var_dump() 方法,判断一个变量的类型与长度,并输出变量的数值,如果变量有值,则输出是变量的值,并返回数据类型。显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
注意:保证 var_dump 中的变量必须是存在的,如果变量不存在则返回 NULL。该函数有输出的功能,因此不必加其它的输出函数。
字符串
#你可以将任何文本放在单引号和双引号中:
<?php
$x = "Hello world!";
echo $x;
echo "<br>";
$x = "123";
echo $x;
echo "<br>";
$y = 'Hello world!';
echo $x;
echo "<br>";
var_dump($y)
?>
整型
#整数是没有小数点的
#整数可以是正数或负数
#整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。
<?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);
?>
浮点型
<?php
$x = 10.365;
var_dump($x);
?>
布尔型
<?php
$x=true;
$y=false;
var_dump($y);
?>
数组
<?php
$a=array("cai","chuan","奇");
var_dump($a);
echo "<br>";
echo "$a[1]";
?>
空值
<?php
$x="Hello world!";
$x=null;
var_dump($x);
?>
类型比较
参考:https://www.runoob.com/php/php-types-comparisons.html
比较操作符可以让您比较两个值:
运算符 | 名称 | 描述 | 实例 |
---|---|---|---|
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 |
<?php
if(42 == "42") {
echo '1、值相等';
}
echo PHP_EOL; // 换行符
if(42 === "42") {
echo '2、类型相等';
} else {
echo '3、类型不相等';
}
?>
常量
设置常量,使用 define() 函数,函数语法如下:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
该函数有三个参数:
- name:必选参数,常量名称,即标志符。
- value:必选参数,常量的值。
- case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
<?php
// 区分大小写的常量名
define("CAI", "欢迎访问 caichuanqi.cn");
echo CAI; // 欢迎访问 caichuanqi.cn"
echo '<br>';
// echo cai; // 输出 欢迎访问 caichuanqi.cn"
define("CAI","你好 蔡川奇",true);
echo cai;
echo "<br>";
?>
#使用常量时,不能在常量名前添加$ 符号,不然会将常量转换成新的未定义变量使用,会导致报错。
字符串
String 函数:https://www.runoob.com/php/php-ref-string.html
在下面的实例中,我们创建一个名为 txt 的字符串变量,并赋值为 "Hello world!" 。然后我们输出 txt 变量的值:
<?php
$txt="Hello world!";
echo $txt;
?>
PHP 并置运算符
在 PHP 中,只有一个字符串运算符。
并置运算符 (.) 用于把两个字符串值连接起来。
<?php
$a="hello world!";
$b="what a nice day!";
echo $a." ".$b;
?>
PHP strlen() 函数
strlen() 函数返回字符串的长度(字节数)。
<?php
$a="hello world!";
$b="what a nice day!";
echo $z=$a." ".$b;
echo "<br>";
echo strlen("what a nice day!");
echo "<br>";
echo strlen($a);
echo "<br>";
echo strlen($z);
?>
PHP strpos() 函数
strpos() 函数用于在字符串内查找一个字符或一段指定的文本。
如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。
<?php
echo strpos("Hello world!","world");
?>
PHP 编码函数
echo md5("Hello world!");#计算字符串的 MD5 散列。
echo "<br>";
echo str_rot13("Hello world !")#对字符串执行 ROT13 编码。
echo "<br>";
echo sha1("Hello world !");#计算字符串的 SHA-1 散列。
echo "<br>";
echo crypt("Hello world !");#单向的字符串加密法(hashing)。
逻辑判断
运算符
运算符
参考:https://www.runoob.com/php/php-operators.html
运算符 | 名称 | 描述 | 实例 | 结果 |
---|---|---|---|---|
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 的商 | 15 / 5 | 3 |
x % y | 模(除法的余数) | x 除以 y 的余数 | 5 % 2 10 % 8 10 % 2 | 1 2 0 |
- x | 取反 | x 取反 | -2 | |
a . b | 并置 | 连接两个字符串 | "Hi" . "Ha" | HiHa |
<?php
$x=10;
$y=6;
echo ($x + $y); // 输出16
echo '<br>'; // 换行
echo ($x - $y); // 输出4
echo '<br>'; // 换行
echo ($x * $y); // 输出60
echo '<br>'; // 换行
echo ($x / $y); // 输出1.6666666666667
echo '<br>'; // 换行
echo ($x % $y); // 输出4
echo '<br>'; // 换行
echo -$x;
?>
三元运算符
另一个条件运算符是"?:"(或三元)运算符 。
语法格式
(expr1) ? (expr2) : (expr3)
对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
<?php
$test = '0';
// 普通写法
$username = isset($test) ? $test : 'nobody';#isset() 函数用于检测变量是否已设置并且非 NULL。
echo $username;
echo "<br>";
$username = (1==1) ? $test : 'nobody';
echo $username;
echo "<br>";
// PHP 5.3+ 版本写法
$username = $test ?: 'nobody';
echo $username;
?>
if 语句
- if 语句 - 在条件成立时执行代码
- if...else 语句 - 在条件成立时执行一块代码,条件不成立时执行另一块代码
- if...elseif....else 语句 - 在若干条件之一成立时执行一个代码块
if 语句
- 在条件成立时执行代码
if (条件)
{
条件成立时要执行的代码;
}
#如果当前时间小于 20,下面的实例将输出 "Have a good day!":
<?php
$t=date("H");
if ($t<"20")
{
echo "Have a good day!";
}
?>
if...else 语句
在条件成立时执行一块代码,条件不成立时执行另一块代码
if (条件)
{
条件成立时执行的代码;
}
else
{
条件不成立时执行的代码;
}
<?php
$t=date("H");
if ($t<"20")
{
echo "Have a good day!";
}
else
{
echo "Have a good night!";
}
?>
if...elseif....else 语句
在若干条件之一成立时执行一个代码块
if (条件)
{
if 条件成立时执行的代码;
}
elseif (条件)
{
elseif 条件成立时执行的代码;
}
else
{
条件不成立时执行的代码;
}
<?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 语句
switch 语句用于根据多个不同条件执行不同动作。
<?php
switch (n)
{
case label1:
如果 n=label1,此处代码将执行;
break;
case label2:
如果 n=label2,此处代码将执行;
break;
default:
如果 n 既不等于 label1 也不等于 label2,此处代码将执行;
}
?>
<?php
$favcolor="red";
switch ($favcolor)
{
case "red":
echo "你喜欢的颜色是红色!";
break;
case "blue":
echo "你喜欢的颜色是蓝色!";
break;
case "green":
echo "你喜欢的颜色是绿色!";
break;
default:
echo "你喜欢的颜色不是 红, 蓝, 或绿色!";
}
?>
循环
- while - 只要指定的条件成立,则循环执行代码块
- do...while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环
- for - 循环执行代码块指定的次数
while 循环
while 循环将重复执行代码块,直到指定的条件不成立。
while (条件)
{
要执行的代码;
}
<html>
<body>
<?php
$i=1;
while($i<=5)
{
echo "The number is " . $i . "<br>";
$i++;
}
?>
</body>
</html>
do...while 语句
do...while 语句会至少执行一次代码,然后检查条件,只要条件成立,就会重复进行循环。
do
{
要执行的代码;
}
while (条件);
<?php
$i=1;
do
{
$i++;
echo "The number is " . $i . "<br>";
}
while ($i<=5);
?>
For 循环
循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块。
for (初始值; 条件; 增量)
{
要执行的代码;
}
参数:
- 初始值:主要是初始化一个变量值,用于设置一个计数器(但可以是任何在循环的开始被执行一次的代码)。
- 条件:循环执行的限制条件。如果为 TRUE,则循环继续。如果为 FALSE,则循环结束。
- 增量:主要用于递增计数器(但可以是任何在循环的结束被执行的代码)。
注释:上面的初始值和增量参数可为空,或者有多个表达式(用逗号分隔)。
<?php
for ($i=1; $i<=5; $i++)
{
echo "数字为 " . $i . "<br>";
}
?>
php函数
PHP 的真正威力源自于它的函数。
在 PHP 中,提供了超过 1000 个内建的函数。
phpinfo();
创建 PHP 函数
函数是通过调用函数来执行的。
<?php
function functionName()
{
// 要执行的代码
}
functionName();
?>
<?php
function writeName()
{
echo "Kai Jim Refsnes";
}
echo "My name is ";
writeName();
?>
案例
为了给函数添加更多的功能,我们可以添加参数,参数类似变量。
参数就在函数名称后面的一个括号内指定。
#下面的实例将输出不同的名字,但姓是相同的:
<?php
function writeName($fname)
{
echo $fname."<br>";
}
echo "我的名字是: ";
writeName("Kai Jim");
echo "我姐姐的名字是: ";
writeName("Hege");
echo "我哥哥的名字是: ";
writeName("Stale");
?>
<?php
function abc($i){
for ($i; $i <10 ; $i=$i+2) {
echo "这个数是:";
echo $i;
echo "吗?<br>";
}
}
abc(-88);
echo "<br>hello world<br>";
abc(3);
echo "<br>hello world<br>";
abc(6);
?>
PHP 魔术常量
参考:https://www.runoob.com/php/php-magic-constant.html
PHP 向它运行的任何脚本提供了大量的预定义常量。
不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。
有八个魔术常量它们的值随着它们在代码中的位置改变而改变。
例如 LINE 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写,如下:
LINE
文件中的当前行号
<?php
echo '这是第 " ' . __LINE__ . ' " 行';
echo __LINE__
?>
FILE
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
自 PHP 4.0.2 起,FILE 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
<?php
echo '该文件位于 " ' . __FILE__ . ' " ';
echo __FILE__;
?>
DIR
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。
它等价于 dirname(FILE)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)
<?php
echo '该文件位于 " ' . __DIR__ . ' " ';
?>
FUNCTION
函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
<?php
function test() {
echo '函数名为:' . __FUNCTION__ ;
}
test();
?>
PHP 面向对象
在面向对象的程序设计(英语:Object-oriented programming,缩写:OOP)中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象。
在现实世界里我们所面对的事情都是对象,如计算机、电视机、自行车等。
对象的主要三个特性:
- 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为。
- 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸,外型。
- 对象的表示:对象的表示就相当于身份证,具体区分在相同的行为与状态下有什么不同。
面向对象内容
- 类 − 定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。
- 对象 − 是类的实例。
- 成员变量 − 定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可称为对象的属性。
- 成员函数 − 定义在类的内部,可用于访问对象的数据。
- 继承 − 继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
- 父类 − 一个类被其他类继承,可将该类称为父类,或基类,或超类。
- 子类 − 一个类继承其他类称为子类,也可称为派生类。
- 多态 − 多态性是指相同的函数或方法可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
- 重载 − 简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
- 抽象性 − 抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。
- 封装 − 封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。
- 构造函数 − 主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
- 析构函数 − 析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做"清理善后" 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。
PHP 类定义
PHP 定义类通常语法格式如下:
<?php
class phpClass {
var $var1;
var $var2 = "constant string";
function myfunc ($arg1, $arg2) {
[..]
}
[..]
}
?>
解析如下:
- 类使用 class 关键字后加上类名定义。
- 类名后的一对大括号({})内可以定义变量和方法。
- 类的变量使用 var 来声明, 变量也可以初始化值。
- 函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问。
实例
<?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;
}
}
?>
变量 $this 代表自身的对象。
PHP_EOL 为换行符。
PHP 中创建对象
类创建后,我们可以使用 new 运算符来实例化该类的对象:
$runoob = new Site;
$taobao = new Site;
$google = new Site;
以上代码我们创建了三个对象,三个对象各自都是独立的,接下来我们来看看如何访问成员方法与成员变量。
调用成员方法
在实例化对象后,我们可以使用该对象调用成员方法,该对象的成员方法只能操作该对象的成员变量:
// 调用成员函数,设置标题和URL
$runoob->setTitle( "菜鸟教程" );
$taobao->setTitle( "淘宝" );
$google->setTitle( "Google 搜索" );
$runoob->setUrl( 'www.runoob.com' );
$taobao->setUrl( 'www.taobao.com' );
$google->setUrl( 'www.google.com' );
// 调用成员函数,获取标题和URL
$runoob->getTitle();
$taobao->getTitle();
$google->getTitle();
$runoob->getUrl();
$taobao->getUrl();
$google->getUrl();
完整代码如下:
实例
<?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;
// 调用成员函数,设置标题和URL
$runoob->setTitle( "菜鸟教程" );
$taobao->setTitle( "淘宝" );
$google->setTitle( "Google 搜索" );
$runoob->setUrl( 'www.runoob.com' );
$taobao->setUrl( 'www.taobao.com' );
$google->setUrl( 'www.google.com' );
// 调用成员函数,获取标题和URL
$runoob->getTitle();
$taobao->getTitle();
$google->getTitle();
$runoob->getUrl();
$taobao->getUrl();
$google->getUrl();
?>
PHP的使用
PHP 表单
回顾一下HTML的表单
HTML 表单
表单是一个包含表单元素的区域。
表单元素是允许用户在表单中输入内容,比如:文本域(textarea)、下拉列表、单选框(radio-buttons)、复选框(checkboxes)等等。
表单使用表单标签