前言
我想问本人,为什么要学习PHP
,什么是PHP
,学习之后,我能做什么,将来的倒退,那么如何学习一门编程语言,如何给出学习倡议。
php
是一种超文本预处理器的学习语言,它是一种被广泛应用的凋谢源代码的多用途的脚本语言,它可嵌入到 HTML
中,尤其是适宜 web
开发。
PHP
是一种在服务器端执行的嵌入 HTML
文档的脚本语言。语言的格调相似于 C
语言,当初被很多的网站编程人员宽泛的使用。应用 PHP
能够开发各种交互式的动静网页。
那么如何了解动静网页呢?接下来说一说:
动静网站和动态网站的区别?
- 动静网站:能够和数据库交互的网站
- 动态网站:不能和数据库交互
还有如 LAMP
这些词代表什么意思呢?在 PHP 中罕用到的:
LAMP 是什么呢,须要理解一下?
L:LINUX
A:Apache
M:mysql
P:PHP
扩展性说说如下词汇,须要咱们逐渐去理解。
PHP 环境搭建(LAMP,LNMP,LNMPA)
LAMP
: Linux+Apache+MySQL+PHP
LNMP
: Linux+Nginx+MySQL+PHP
LNMPA
: Linux+Nginx+MySQL+PHP+Apache
WAMP
: Window+Apache+MySQL+PHP
集成环境:wampserver, xampp, phpstudy
apache,web 服务器
Apache
是世界上应用排名前列的 web
服务器软件,它能够运行在简直所有宽泛应用的计算机平台上,因为其跨平台和安全性被宽泛应用,是最风行的 web
服务器端软件之一。它疾速,牢靠并且可通过简略的 api
裁减。
那么让咱们走进 PHP
世界,理解其语法结构吧!
根底语法
PHP
文档构造:1. 文档扩展名.php
; 2. 留神,文件名不要应用中文,也不要蕴含特殊字符
PHP
标记格调:
- 规范格调
上面看看代码示例:
<?php 代码段;?>
- 短格调
上面看看代码示例:
<? 代码段;?>
留神:须要配置
PHP
配置文件php.ini
中short_open_tag=On
,重启Apache
服务器即可
ASP
格调:
上面看看代码示例:
<% 代码段; %>
留神:须要配置
PHP
配置文件php.ini
中asp_tags=On
,重启Apache
服务器即可
PHP
语法格调示例:
<?php
echo 'this is dada show dada';
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>55555--<?php echo 'hello world';?></title>
<style media="screen">
h1{color:<?php echo '5555';?>;}
</style>
<script type="text/javascript">
alert('hello world');
</script>
</head>
<body>
<h1>this is dadada show time<?php echo 'dada';?></h1>
</body>
</html>
<?php
// 规范格调的写法
// echo 输入一个或者多个字符串
/*
echo 'this is a dada';
echo '<br/>';
echo 'hello world';
*/
echo 'this is dada show time';
学习 php
须要工具,这里能够说说常应用的phpstorm
讲讲 phpstorm
的装置和应用
phpstorm
是 JetBrains
公司开发的一款商业的 PHP
集成开发工具,能够随时帮忙用户对其进行编码,运行单元测试或者提供可视化 debug
性能。
下载
进入 phpstorm
官网,点击 “downLoad”
按钮,进入下载页面。
最初,双击桌面图标即可。
PHP 语法结构
php
文件命名注意事项:
变量的注意事项:
数据类型:
特殊符号:
单引号和双引号的区别
- 双引号解析变量,单引号不解析变量
- 单引号执行效率快
- 双引号解析所有的本义符,单引号只解析
\
和\\
这两个本义符
花括号的意义
- 将变量变成一个整体
- 第一种
${变量名} 变量名
; - 第二种
{$ 变量名变量名}
;
通过函数模式实现长期转换
intval(变量)
转成整型strval(变量)
转成字符串型boolval(变量)
转成布尔类型
永恒转换
settype
(变量,设置的类型)设置变量类型gettype
(变量)失去变量的类型
变量函数库检测变量类型
is_int
(变量) > 检测整型is_string
(变量) > 检测字符串类型is_array
(变量) > 检测数组类型is_resource
(变量) > 检测资源类型is_object
(变量) > 检测对象类型is_null
(变量) > 检测 null 类型is_numeric
(变量) > 检测数值型
常量
- 问:什么是常量?
- 答:常量和变量相同,在脚本执行期间该量不能被批改
零碎常量
PHP_VERSION
: 失去php
版本PHP_OS
:失去服务器的操作系统M_PI
:PI
的值
- 注意事项:
- 常量名称后面没有
$
符号 - 结尾用字母或者下划线,尽量应用大写字母
- 常量定义进去,不能扭转也不能取消定义
- 常量的值只能为标量,能够用资源,然而不举荐
- 常量默认辨别大小写
检测常量是否被定义
defined
函数var_dump
(defined
变量)
魔术常量
__LIEN__
失去行号__FILE__
失去文件的残缺门路和文件名__FUNCTION__
函数名称__CLASS__
类__METHOD__
办法__DIR__
返回文件所在门路
以点的模式来连贯咱们的变量
随机生成验证码
让咱们来看看上面示例代码:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="jquery-2.2.3.js" type="text/javascript"></script>
</head>
<body>
<?php
header("content-type:text/html;charset=utf-8");
$str = '';
$rand = mt_rand(1000, 9999);
$str.='<span style="color:rgb('.mt_rand(0, 255).',
'.mt_rand(0, 255).','.mt_rand(0, 255).')
">'.mt_rand(0, 9).'<span>';
$str.='<span style="color:rgb('.mt_rand(0, 255).',
'.mt_rand(0, 255).','.mt_rand(0, 255).')
">'.mt_rand(0, 9).'<span>';
$str.='<span style="color:rgb('.mt_rand(0, 255).',
'.mt_rand(0, 255).','.mt_rand(0, 255).')
">'.mt_rand(0, 9).'<span>';
$str.='<span style="color:rgb('.mt_rand(0, 255).',
'.mt_rand(0, 255).','.mt_rand(0, 255).')
">'.mt_rand(0, 9).'<span>';
?>
<label for="check"> 请输出验证码:</label>
<div id="hiddent_val" style="display: none;"><?php echo $str ?></div>
<input type="text" name="check" id="check_val"/><?php echo $str; ?>
<br/>
<input type="button" onclick="javascript:check();" value="提交"/>
<script>
function check(){var v1=$("#hiddent_val").text();
v1 = v1*1;
var v2=$("#check_val").val();
v2 = v2*1;
if(v1==v2){alert('true');
}else{alert('false');
}
}
</script>
</body>
</html>
日期函数
日期函数格局代码:
data($format[,$time=time()])
time():
Y: 年,m: 月, d: 日, h: 小时, i: 分钟, s: 秒
w: 星期一到星期天 0 示意星期天
设置时区:函数模式
date_default_timezone_get()
date_default_timezone_set($timezone);
预约义变量
预约义变量:零碎内已定义的变量,如下有:
$_POST:http
–post
变量,接管表单以post
形式发送的数据$_GET:HTTP
–get
变量,接管以?
模式传参的数据$_FILES:HTTP
文件上传变量$_SERVER
: 服务器和执行环境变量$_ENV
:环境变量$_SESSION
: 会话变量$_COOKIE
:HTTP Cookies$_REQUEST:$_GET+$_POST+$COOKIE
$php_errormsg
前一个错误信息$GLOBALS
超全局变量,在全副作用域中始终可用的内置变量
Switch…case
让咱们看看 Switch...case
的示例代码如下:
<?php
$a = 2;
switch ($a){
case 1:
echo 'a<br/>';
break;
case 2:
echo 'b<br/>';
break;
case 3:
echo 'c<br/>';
break;
default:
echo '默认的执行';
}
for 示例
让咱们看看 for
的示例代码如下:
<?php
// 1 到 100 的数进行相加 5050,//1+2+3+4
$sum =0;
for($i=0;$i<101;$i++){$sum = $sum+$i;}
echo $sum;
echo '<hr/>';
// 1 到 100 可能被 2 整除的数,for($i=1;$i<101;$i++){if($i%2==0){echo '这是可能被 2 整除的数:'.$i.'<br/>';}
}
学习小案例如下 - 乘法表代码:
<?php
/* 1*1=1;
* 1*2=2 2*2=4
* */
for($i=1;$i<=9;$i++){for($j=1;$j<=$i;$j++){echo $j.'*'.$i.'='.($i*$j)."\t";
}
echo '<br/>';
}
非凡流程管制
非凡流程管制 - 示例:
<?php
//break 跳出整个 for 循环
for($i=1;$i<10;$i++){if($i==3){break;}
echo '这里是 $i 的值:'.$i.'<br/>';
}
echo '<hr/>';
//continue 跳出以后循环
for($i=1;$i<10;$i++){if($i==3){continue;}
echo '这里是 $i 的值:'.$i.'<br/>';
}
echo '<hr/>';
echo '这里是开始局部';
goto jump;
echo '这里是 jump 上面的代码';
jump:
echo '这里是 jump 外面的代码';
echo '<hr/>';
echo '这里是完结局部';
php 数组
什么是 PHP 数组呢?数组是什么呢?- 数组:数据的汇合,在 php
中数组实际上是一个有序映射。
通过 array()
模式申明:
array()
空数组array(值 1, 值 2...)
下标间断的索引数组,数组的下标从 0 开始array(key=>value,key=>value...)
能够申明索引数组和关联
通过:print_r
打印数组
数组或者混合数组:
- 数组的键名能够是整型或者字符串型
- 如果键名不是整型或者字符串型,会做如下的强制转换
- 蕴含有非法整型值的字符串会转换为整型
- 浮点数取整转换成整型
- 布尔
true
转换为 1,false
转换为 0 null
转换为空字符串- 数组和对象不能用作键名
动静和疾速创立数组
动态创建数组:
$
数组名称[]
:下标间断的索引数组$
数组名称[数字]
:指定数组索引$
数组名称[字符串]
:关联数组
疾速创立数组 - 示例格局:
range($min, $max[$step=1]); 疾速创立索引数组
compact($varname,...); 疾速创立关联数组
学习小示例:
<?php
// $arr = array();
// var_dump($arr);
// 索引数组 下标是从数字开始的
$arr = array(
1,
5.5,
false,
'dada'
);
print_r($arr);
echo '<hr/>';
//array(key=>value,key=>value...)
$arr1 = array(
5=>'dada',
6=>12,
9=>false,
4=>4.4
);
print_r($arr1);
echo '<hr/>';
// 关联数组,下标是字符串
//username 能够称说为咱们的键名,// 咱们的键名所对应的值就是键值
$arr2 = array(
'username'=>'dada',
'password'=>123456,
'age'=>27
);
print_r($arr2);
echo '<hr/>';
// 索引 + 关联混合应用
$arr3 = array(
1,2,3,4,5,
'username'=>'dadaqianduan',
'addr'=>'haha'
);
print_r($arr3);
echo '<hr/>';
$arr3['username'] = 'dada';
print_r($arr3);
通过数组指针函数遍历数组
current($arr)
,失去数组以后指针所在位置元素的键值key($arr)
, 失去数组以后指针所在位置元素的键名next($arr)
,将数组指针向下挪动一位,并且失去数组指针所在位置元素的键值prev($arr)
,将数组指针向上挪动一位,并且返回以后指针所在位置元素的键值end($arr)
,将数组指针挪动到数组的开端,并且返回以后元素的键值reset($arr)
, 将数组指针挪动到数组的开始,并且返回以后元素的键值
通过 foreach 遍历数组
foreach(数组名称 as $key=>$val){}
通过 list 和 each 遍历数组
list($var[,$var...])
: 把数组中的值赋给一些变量each($arr)
返回数组中以后的键 / 值对并将数组指针向前下挪动一位
用户列表页面
如何创立用户列表页面,示例代码格局如下:
<tr style="text-align:center;">
</tr>
<?php foreach($userInfo as $val){
?>
<tr style="text-align:center;">
<td><?php echo $val['id'];?></td>
<td><img src="img/<?php echo $val['id'];?>" alt=""/></td>
</tr>
<?php
}?>
增加留言页面
如何增加留言页面,示例代码格局如下:
<body>
<h2> 增加留言页面 </h2>
<form action="doAction.php?act=add" method="get">
<table border="1" width="80%" cellpadding="0" cellspacing="0" bgcolor="blue">
<tr>
<td> 留言者 </td>
<td><input type="text" name="username" id=""placholder=" 请输入您的呢称 "/></td>
</tr>
</table>
</form>
</body>
提交反映 -doAction.php
<?php
$username = $_GET['username'];
$title = $_GET['title'];
$content = $_GET['content'];
$arr[] = array(
'username' => $username,
'title' => $title,
'content' => $content
);
print_r($arr);
收集留言信息:
$filename = 'text.txt';
$data = 1;
file_put_contents($filename, $data);
<input type="hidden" name="act" value="add"/>
?php
$username = isset($_GET['username']) ? $_GET['username'] : '';
$time = date('Y-m-d h:i:s');
$act = isset($_GET['act']) ? $_GET['act']:''; // 是否是增加页面
// 判断
if(file_exists($filename) && filesize($filename)>0){$str = file_get_contents($filename);
$arr = unserialize($str);
}
if($act == 'add'){
...
$arr = serialize($arr);
file_put_contents($filename, $arr);
}
if($act == 'add') {$arr[] = array(
'username' => $username,
'title' => $title,
'content' => $content,
'time' => $time
);
$arr = serialize($arr);
if(file_put_contents($filename, $arr)){echo'增加留言胜利';}else{echo '增加留言失败';};
}
php 函数
总结 9 点罕用函数,上面来看看它们各有什么含意以及作用:
strlen($string)
失去字符串长度- 查找字符串:
strpos($string,$search[,$offset])
: 在指定字符串中查找指标字符串第一次呈现的地位stripos($string,$search[,$offset])
: 疏忽大小写的去查找strrpos($string,$search[,$offset])
: 在指定字符串中查找指标字符串最初一次呈现的地位strripos($string,$search[,$offset])
: 疏忽大小写的去查找最初一次呈现的地位strstr|strchr($string,$search[,$before_needle])
: 查找字符串的首次呈现,返回的是字符串strrchr($string,$search)
: 查找指定字符在字符串中的最初一次呈现stristr($string,$search[,$before_needle])
: 疏忽大小写的去查找str_replace($search,$replace,$string)
: 在指定字符串中去查找另外一个字符串,找到之后将其替换成指定字符串str_ireplace($search,$replace,$string)
: 疏忽大小写的去查找并替换
- 字符串大小写
strtolower($string)
:返回小写之后的字符串strtoupper($string)
: 返回大写之后的字符串ucwords($string)
:单词的首字母大写ucfirst($string)
: 字符串的单词的首字母大写lcfirst($string)
:字符串的单词的首字母小写
- 字符 ASCII
ord($char)
: 失去指定字符的 ASCIIchr($ascii)
: 依据 ASCII 失去指定的字符
- 字符串的截取
substr($string,$start[,$length])
: 截取字符串substr_replace($string,$replace,$start[,$length]):
替换字符串的子串
- 加密
md5($string)
: 计算字符串的 md5 的散列值,返回32
位长度的字符串sha1($string)
: 计算字符串的 sha1 的散列值,返回40
位长度的字符串
- 过滤:
trim($string[,$charlist])
: 默认过滤字符串两端的空格,也能够过滤指定字符串ltrim($string[,$charlist])
: 过滤字符串左端rtrim | chop($string[,$charlist])
: 过滤字符串右端strip_tags($string[,$allowTag])
: 过滤字符串中的 html 标记addslashes($string)
: 应用反斜线援用字符串中的特殊字符htmlentities($string[,$flag=ENT_COMPAT])
: 将所有字符转换成 HTML 实体htmlspecialchars($string[,$flag=ENT_COMPAT]
: 将字符串中的特殊字符转换成 HTML 实体nl2br($string)
:将字符串中的\n
用<br/>
替换
- 拆分 / 合并
explode($delimiter,$string)
将指定字符串拆分成数组implode | join($delimiter,$array)
以指定分隔符将数组中的键值连接成字符串str_split($string[,$split_length=1])
将字符串转换成数组
- 罕用函数
strrev($string)
反转字符串str_shuffle($string)
随机打乱字符串str_repeat($string)
反复字符串str_getcsv(...)
解析 csv 字符串为一个数组parse_str($str[,$arr])
将字符串解析成多个变量
接下来以表格的模式展现如下内容
数学函数库表格如下:
函数 | 阐明 |
---|---|
abs($number) |
求绝对值 |
ceil($number) |
进一取整 |
floor($number) |
舍掉小数局部 |
round($number,$percision) |
四舍五入 |
pow($base,$exp) |
幂运算 |
sqrt($number) |
平方根 |
max($val1,$val2,..) |
求最大值 |
min($val1,$val2...) |
求最小值 |
mt_rand($min,$max) |
产生随机数 |
日期工夫函数库表格如下:
函数 | 阐明 |
---|---|
date_default_timezone_get() |
失去默认时区 |
date_default_timezone_set($timezone) |
设置默认时区 |
date($format[,$time]) |
失去服务器的日期工夫 |
time() |
失去以后的工夫戳 |
mktime() |
获得一个日期的 unix 工夫戳 |
getdate($timestamp) |
获得日期工夫信息 |
gettimeofday($return_float) |
获得以后工夫 |
microtime([$get_as_float]) |
返回以后 unix 工夫戳和奥妙数 |
strtotime($time[,$now=time()]) |
将任何英文文本的日期工夫形容解析为 unix 工夫戳 |
创立数组操作
函数 | 形容 |
---|---|
range($min, $max[,$step=1]) |
疾速创立下标间断的索引数组 |
compact($varname,$varname...) |
疾速创立关联数组 |
array_fill($start_index,$num,$value) |
用给定的值填充数组 |
array_fill_keys($keys,$value) |
应用指定的键和值填充数组 |
array_combine($keys,$values) |
创立一个数组,用一个数组的值作为其键名,另外一个值作为其键值 |
键值相干操作表格如下:
函数 | 形容 |
---|---|
count() |
计算数组中的单元数目或对象中的属性个数 |
array_keys($array) |
获得数组的键名作为下标间断的索引数组返回 |
array_values($array) |
获得数组的键值作为下标间断的索引数组返回 |
array_filp($array) |
替换数组中的键名和赋值 |
in_array() |
检测数组中是否存在某个值 |
array_search() |
在数组中搜寻给定的值,如果胜利则返回相应的键名 |
arry_key_exists() |
查看给定的键名或索引是否存在于数组中 |
array_reverse() |
数组倒置 |
shuffle() |
打乱数组的元素 |
array_rand() |
随机取出数组的键名 |
array_unique() |
移除数组中反复的值 |
array_sum() |
统计数组中元素值的总和 |
数组指针函数表格如下:
函数 | 形容 |
---|---|
key($array) |
失去以后指针所在位置元素的键名 |
current($array) pos($array) |
失去以后指针所在位置元素的键值 |
next($array) |
将数组指针向下挪动一位,并且返回以后指针所在位置元素的键值 |
prev($array) |
将数组指针向上挪动一位,并且返回以后指针所在位置元素的键值 |
end($array) |
将数组指针挪动到数组的开端, 并且返回以后指针所在位置元素的键值 |
reset($array) |
将数组指针挪动到数组的开始,并且返回以后指针所在位置元素的键值 |
each($array) |
返回数组中以后的键值对,并将数组指针向下挪动一位 |
list($var,...) |
将数组中元素的值赋给对应的变量 |
array_unshift($array,$value...) |
在数组结尾插入一个元素或者多个元素 |
array_shift($array) |
弹出数组的第一个元素 |
array_push($array,$value...) |
在数组开端压入一个元素或者多个元素 |
array_pop($array) |
弹出数组的最初一个元素 |
数组的拆分与合并表格如下:
函数 | 形容 |
---|---|
array_slice($array,$offset) |
截取数组 |
array_merge() |
合并数组 |
自定义函数的应用
如何申明函数呢?来看看如下代码:
function 函数名称([参数...]){
函数体;
return 返回值;
}
注意事项:
- 函数名称不要蕴含特殊字符,以字母或者下划线开始,跟上数字字母下划线
- 函数名称最好含意明确,最好以动词结尾
- 函数名称最好恪守驼峰标记或者下划线法
- 函数名称不反对重名
- 函数名称不辨别大小写,但调用的时候最好遵循大小写
- 函数参数不是必须的
- 函数默认返回 Null, 也能够通过 return 增加返回值
接下来咱们看看带入的函数参数:
参数分为形参和实参:
形参,定义函数时申明的参数(必选参数:调用函数的时候必选要传参;可选参数:调用函数的时候如果不传参数,应用默认值;)
实参,调用函数时理论传入的参数
接下来理解变量的作用域,如下思维导图:
接下来说说函数的传值和传援用区别:
- 函数的传值在函数体内对变量做更改不影响变量自身
- 传援用在函数体内对变量做更改影响变量自身
回调函数
回调函数是什么呢?
在开发过程中,有时候心愿针对一个对象或者一个值执行多个不相干的操作,那么使用回调将是最好的形式。
<?php
function text1(){echo '我是达达';}
function text2($username){echo '我是哪吒';}
// 回调函数:函数体内的名称是咱们要传入的参数();function callBack($call,$str){$call($str);
}
// 回调函数的应用就是传入的参数是你想要回调的函数名称
callBack('text2','dadaqianduan');
递归函数
什么是递归函数,即函数体本人调用本人自身
写法示例:
function text($i) {
echo $i;
$i--;
if($i>=0){text($i);
}
}
text(2);
匿名函数
匿名函数示例:
$str = function() {echo 'dadaqianduan';};
$str();
$str1 = function($username) {
echo 'dada';
echo $username;
};
$str1('哪吒');
php 蕴含文件
php 的文件蕴含:include
,include_once
,require
,require_once
,就是将一个文件的内容蕴含进另外一个文件。
require
援用文件出错的时候 是一个报错一个正告include
援用文件出错的时候 是两个正告- 错误处理:
require
会生成致命谬误并进行脚本 - 错误处理:
include
只会生成正告, 并且脚本会持续
所以这里倡议你应用 include
哦!
include
或 require
语句会获取指定文件中存在的所有文本,代码,标记,并复制到应用 include
语句文件中。
语法格局如下:
include 'filename';
或
require 'filename';
php include 示例:
让咱们来创立要给名为 ’dada.php’ 的规范的页脚文件,代码如下:
<?php
echo '<p> 达达 哪吒 </p>';
?>
而后须要在另一个页面中援用这个页脚文件如下:
<html>
<body>
<p> 魔王哪吒 </p>
<?php include 'footer.php'; ?>
</body>
</html>
require_once/include_once
,与 require/include
作用雷同,不同在于执行到时会先查看指标内容是不是在之前曾经导入过,如果导入过了,那么便不会再次反复引入其同样的内容。
面向对象
首先理解面向对象是什么呢?
它是一种思维,是一种开发方式,并不是理论的代码。
谈到面向对象,就要说到面向对象与面向过程的区别:
- 其实面向过程强调的是性能行为(一件事怎么做)
- 面向对象是将性能封装到对象,强调具备了性能的对象(一件事谁来做)
- 面向对象的特点:继承,封装,多态
面向的几种形式:
OOA(Object Oriented Analysis)面向对象分析
OOD(Object Oriented Design)面向对象设计
OOP(Object Oriented Programming)面向对象编程
类和对象
说到面向对象就离不开类和对象的关系:类是具体事务的形象,对象是这个类的具体实例。
怎么样定义一个类,类的定义:(相似 class 关键字来定义的)
class Person{
}
<?php
// 定义一个人类
class Person{
// 类外面是有属性和办法存在的
// public 拜访修饰符
public $userName = 'dada';
public $age = 12;
}
// 通过 new 关键字来创立咱们的对象
$p = new Person();
echo $p->userName.'<hr/>';
echo $p->age.'<hr/>';
属性讲了,说说办法吧,如下示例:
<?php
class Person{
public $userName;
public $age;
// 类外面的行为称为办法
public function eat() {echo '我要吃饭';}
}
$p = new Person();
$p->eat();
对象在内存的调配
来说一下对象的内存剖析,在 PHP 中,内存被划分为四个:
- 数据段:用来存放程序中已初始化且不为 0 的全局变量如:动态变量和常量
- 代码段:寄存函数,办法
- 栈空间段:寄存小数据
- 堆空间段:寄存对象和数据量比拟大的援用
php 拜访修饰符
拜访修饰符有哪些呢?如下展现:
public
公共的,默认protected
受爱护的private
公有的
代码示例如下
<?php
class Da{
public $userName = 'dada';
protected $age = 12;
public function eat() {echo '我要吃饭';}
}
$da = new Da();
echo $da->userName
echo $da->age // 报错
批改如下:
<?php
class Da{
public $userName = 'dada';
protected $age = 12;
public function eat() {
echo '我要吃饭';
//$this
echo $this->age;
}
}
$da = new Da();
echo $da->userName
echo $da->eat()
构造函数和析构函数
首先什么是构造函数呢?构造函数是通过 new
对象的时候会被调用的。
其次析构函数是什么?析构函数首先不能带有参数,析构函数会在对象的所有援用被删除或者显示的隐没之前被调用。
<?php
class Person {
public $userName;
public $age;
// php5.5 之前的写法
// public function Person() {
// echo '我是构造函数';
// }
// 通过一个魔术常量来写构造函数
public function _construct($userName,$age) {
// $this 示意的是以后对象
$this->userName = $userName;
$this->age = $age;
}
// 析构函数
public function _destruct(){echo '析构函数'}
}
$p1 = new Person('dada',12);
echo $p1->userName
$p1 = null; // 析构函数被调用
set 和 get 魔术办法
理解 set 和 get
办法:set
对外界提供设置成员属性的办法,而 get
对外界提供拜访成员属性的办法。
所以魔术常量:_set
和_get
。
如下示例:
<?php
class Person{
private $userName;
private $age;
public function setAge($age){
// $this->age = 12;
// $this-age == private $age;
$this->age = $age;
}
public function getAge(){return $this->age;}
public function _set($key,$value){$this->userName = $value;}
public function _get($key){return $this->userName;}
$p = new Person();
// echo $p->userName;
$p->setAge(16);
echo $p->getAge();
isset 和 unset 魔术办法
_isset
当内部调用isset()
函数检测不可拜访的属性或者不存在的属性时主动调用。_unset
当在类内部调用unset
销毁不可拜访属性时主动调用。
如下示例示意:
<?php
class Person{
private $userName;
private $age;
public $abc;
public function _construct($userName,$age){
$this->userName=$userName;
$this->age=$age;
}
public function _isset($name){echo '当内部调用 isset()函数检测不可拜访的属性或者不存在的属性时主动调用';
return isset($name); // boolean
}
public function _unset($name){echo '当在类内部调用 unset 销毁不可拜访属性时调用';}
}
$p = new Person('dada',12);
var_dump(isset($p->userName));
// echo '<hr/>'
unset($p->abc);
继承
上面来说说面向对象的继承,封装,多态中的继承特点:
那么继承的意义在于哪里,用继承能够缩小反复代码,通过 extends
关键字来继承。
代码示例如下:
<?php
class Person{
public $userName;
public $age;
public function eat(){echo 'dadaqianduan';}
}
class Student extends Person{
}
$stu = new Student();
echo $stu->eat();
应用 parent
关键字
继承中应用parent
,代码如下:
<?php
class Person {
public $userName='parent';
public $age = 100;
protected function eat() {echo ` 老爸要吃饭 `;}
}
class Student extends Person {
public $userName = 'children`;
public $age = 12;
// 重写 须要拜访的修饰符必须和父类的平级或者大于父类,办法名字雷同
public function eat() {parent::eat().'<hr/>';
echo 'children';
}
}
$stu = new Student();
echo $stu->eat();
应用 final 关键字
应用 final 关键字注意事项:
final
关键字不能润饰属性- 被
final
润饰过的class
和办法不能被继承或者重写
应用 static 关键字
static
用于示意动态的意思:
- 被
static
所润饰的属性和办法都是动态的属性和办法 - 动态的属性和办法的特点是不必通过对象来调用属性和办法
- 能够通过类名来调用属性和办法
上面代码示例如下:
class Person {
public static $i = 1;
public static function eat(){echo '要吃饭';}
}
echo Person::$i;
Person::eat();
self
在类外部通过 self
来拜访动态的属性和办法:
上面代码示例如下:
class Student {
public static $i = 1;
public static function eat(){echo self::$i;}
}
Student::eat();
上面示例动态绑定的用法如下:
<?php
class A{public static function text1(){echo 'text1';}
public static function text2(){
echo 'text2';
self::text1();}
}
class B extends A {public static function text1(){echo 'B-A';}
}
B::text2();
应用 const 关键字
const,为常量修饰符,常量的特点,不能被批改,惟一的标识符,留神如下:常量要大写,不能通过对象来拜访,不须要加 $
符号。
学生管理系统
示例连贯数据库:
<?php
header("content-type:text/html;charset=urf-8");
// 建设连贯并且返回连贯对象
$link = mysqli_connect('localhost','root','root') or die('连贯失败');
// 设置字符集
mysqli_set_charset($link,'utf8');
// 关上指定数据库
mysqli_select_db($link, 'dadaqianduan');
// 执行 sql 语句
$query = "insert user values(1,'dada','12345')“;$res = mysqli_query($link, $query);
if($res){echo '插入数据胜利';}else{echo '插入数据失败';}
所以 mysqli
操作数据库的步骤有:
- 连贯
mysql
- 设置字符集
- 关上指定数据库
- 执行
sql
查问 - 开释后果集
- 敞开连贯
如果每次应用都要重写连贯数据库,那么咱们能够进行封装:
封装数组:config.php
<?php
$config = array(
'host'=>'localhost',
'user'=>'root',
'password'=>'root',
'charset'=>'utf8',
'dbName'=>'dadaqianduan'
);
define('DB_HOST','localhost');
define('DB_USER','root');
define('DB_PWD','root');
define('DB_CHARSET','utf8');
define('DB_DBNAME','dadaqianduan');
连贯
<?php
/**
* 连贯
* @param string $host
* @param string $user
* @param string $password
* @param string $charset
* @param string $database
* @return object 连贯标识符
*/
function connect1($host,$user,$password,$charset,$database){$link = mysqli_connect($host,$user,$password) or die('数据库连贯失败');
mysqli_set_charset($link,$charset);
mysqli_select_db($link,$database) or die('指定数据库关上失败');
return $link;
}
连贯 须要传递数组
/**
* 连贯 须要传递数组
* @param array $config
* @return object
*/
function connect2($config){$link=mysqli_connect($config['host'],$config['user'],$config['password']);
mysqli_set_charset($link,$config['charset']);
mysqli_select_db($link,$config['dbName'] or die('指定数据库关上失败');
return $link;
}
用常量的模式建设连贯
/**
* 用常量的模式建设连贯
* @return unknown
*/
function connect3(){$link = mysqli_connect(DB_HOST,DB_USER,DB_PWD) or die('数据库连贯失败');
mysqli_set_charset($link,DB_CHARSET);
mysqli_select_db($link,DB_DBNAME) or die('指定数据库关上失败');
return $link;
}
插入操作
/*
array(
'username'=>'dada',
'password'=>'dada',
'age'=>'123456',
'regTime'=>'12345'
);
INSERT user(username,password,age,regTime) VALUES('dada','dada','12','123123123');
*/
/**
* 插入操作
* @param object $link
* @param array $data
* @param string $table
* @return boolean
*/
// 插入的封装
function insert($link,$data,$table){$keys=join(',',array_key($data));
$vals = "'".join("','", array_values($data))."'";
$query = "insert{$table}({$keys})values({$vals})";
$res = mysqli_query($link,$query);
if($res){return mysqli_insert_id($link);
}else{return false;}
}
更新操作
/*
array(
'username'=>'dada',
'password'=>'dada',
'age'=>'12',
'regTime'=>'123123123'
);
UPDATE user SET username='dada',password='dada',age='12',regTime='123123123' WHERE id=1
*/
/**
* 更新操作
* @param object $link
* @param array $data
* @param string $table
* @param string $where
* @return boolean
*/
function update($link, $data, $table, $where = null) {foreach ( $data as $key => $val) {$set .= "{$key}='{$val}',";
}
$set = trim ($set, ',');
$where = $where == null ? '':' WHERE ' . $where;
$query = "UPDATE {$table} SET {$set} {$where}";
$res = mysqli_query ($link, $query);
if ($res) {return mysqli_affected_rows ( $link);
} else {return false;}
}
删除操作
//DELETE FROM user WHERE id=
/**
* 删除操作
* @param object $link
* @param string $table
* @param string $where
* @return boolean
*/
function delete($link, $table, $where = null) {
$where = $where ? 'WHERE' . $where : '';
$query = "DELETE FROM {$table} {$where}";
$res = mysqli_query ($link, $query);
if ($res) {return mysqli_affected_rows ( $link);
} else {return false;}
}
查问所有记录
/**
* 查问所有记录
* @param object $link
* @param string $query
* @param string $result_type
* @return array|boolean
*/
function fetchAll($link, $query, $result_type = MYSQLI_ASSOC) {$result = mysqli_query ( $link, $query);
if ($result && mysqli_num_rows ( $result) > 0) {while ( $row = mysqli_fetch_array ( $result, $result_type) ) {$rows [] = $row;
}
return $rows;
} else {return false;}
}
失去表中的记录数
/**
* 失去表中的记录数
* @param object $link
* @param string $table
* @return number|boolean
*/
function getTotalRows($link, $table) {$query = "SELECT COUNT(*) AS totalRows FROM {$table}";
$result = mysqli_query ($link, $query);
if ($result && mysqli_num_rows ( $result) == 1) {$row = mysqli_fetch_assoc ( $result);
return $row ['totalRows'];
} else {return false;}
}
失去后果集的记录条数
/**
* 失去后果集的记录条数
* @param object $link
* @param string $query
* @return boolean
*/
function getResultRows($link, $query) {$result = mysqli_query ( $link, $query);
if ($result) {return mysqli_num_rows ( $result);
} else {return false;}
}
获取信息的封装:
/**
* @param object $link
*/
function getServerInfo($link) {return mysqli_get_server_info ( $link);
}
/**
* @param object $link
*/
function getClientInfo($link) {return mysqli_get_client_info ( $link);
}
/**
* @param object $link
*/
function getHostInfo($link){return mysqli_get_host_info($link);
}
/**
* @param object $link
*/
function getProtoInfo($link) {return mysqli_get_proto_info ( $link);
}
Redis 初识
上面展现介绍,思维导图如下:
Redis 是一个开源(BSD
许可)的,内存中的数据结构存储系统,它能够用作数据库、缓存和消息中间件。它反对多种类型的数据结构,如 字符串(strings
),散列(hashes
),列表(list
),汇合(sets
),有序汇合(sorted sets
)与范畴查问,bitmaps
,hyperloglogs
和 天文空间(geospatial
)索引半径查问。Redis
内置了 复制(replication
),LUA 脚本(Lua scripting
),LRU 驱动事件(LRU eviction
),事务(transactions
)和不同级别的 磁盘长久化(persistence
),并通过 Redis 哨兵(Sentinel
)和主动 分区(Cluster
)提供高可用性(high availability
)。
长处:
- 常驻内存,读写性能优越,远胜于硬盘
IO
- 反对多种数据格式,能实现多种业务须要
- 能够主动保留数据到硬盘,服务重启时复原,服务稳固长久
操作Redis
装置
Window
下装置
下载地址:https://github.com/tporadowski/redis/releases
。
Redis
反对 32 位和 64 位。这个须要依据你零碎平台的理论状况抉择,这里咱们下载 Redis-x64-xxx.zip
压缩包到 C 盘,解压后,将文件夹重新命名为 redis
。
关上文件夹,内容如下:
关上一个 cmd
窗口 应用 cd
命令切换目录到xxx:\redis
运行:
redis-server.exe redis.windows.conf
另启一个 cmd
窗口,原来的不要敞开,不然就无法访问服务端了。
Windows 疾速配置 PHP+MySQL 环境变量(phpStudy)
设置一下是否失效:
Composer
是 PHP
用来治理依赖(dependency
)关系的工具。你能够在本人的我的项目中申明所依赖的内部工具库(libraries
),Composer
会帮你装置这些依赖的库文件。
https://getcomposer.org/
点击Getting Started
点击下载:
https://developer.aliyun.com/composer?spm=a2c4e.11153940.0.0.40eb6995J6zupg
查看:
Windows
疾速配置NodeJS
配置淘宝镜像源的命令行:
npm config set registry http://registry.npm.taobao.org
Windows
疾速配置Bower
在 Windows
下应用 phpStudy
装置
应用腾讯云服务器
fastadmin.net/go/tencent
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
下载
https://www.bt.cn/?invite_code=MV9veWhubmU=
点击立刻装置https://www.bt.cn/bbs/thread-19376-1-1.html
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
域名的解析
谬误:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at admin@php.cn to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.
批改.htaccess
为以下内容
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Node.js
(可选, 用于装置 Bower 和 LESS, 同时打包压缩也须要应用到)Composer
(可选, 用于治理第三方扩大包)Bower
(可选, 用于治理前端资源)Less
(可选, 用于编辑 less 文件, 如果你须要增改 css 款式, 最好装置上)
点关注,不迷路
好了各位,以上就是这篇文章的全部内容,能看到这里的人都是人才。我前面会不断更新技术相干的文章,如果感觉文章对你有用,欢送给个“赞”,也欢送分享,感激大家!!