php 的艺术体系
语法
- 变/常量:
$a = 1
:变量
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
:常量
- 输出
echo
:用于输出字符串print
:用与输出 echo 输出的速度比print快,echo没有返回值,print有返回值
<?php
$txt1="学习 PHP";
$txt2="RUNOOB.COM";
$cars=array("Volvo","BMW","Toyota");
echo $txt1;
echo "<br>";
echo "在 $txt2 学习 PHP ";
echo "<br>";
echo "我车的品牌是 $cars[1]";
?>
说明:
1. 官方案例中使用了{$cars[1]}
,它与$cars[1]
等价。
- 数组
> 1. 数据的生命
$array[0] =
这样的方式可以声明 > 2.array();
用与声明一个数组 > 3. 数组的嵌套:也就是array()的嵌套。 > 4. 数组的长度count($array)
函数获取 > 5. map 的对象$array['nao']=
> 6.
<?php
// 二维数组:
$cars = array
(
array("Volvo",100,96),
array("BMW",60,59),
array("Toyota",110,100)
);
?>
同时数据可以表示map
<?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>");
?>
如何获取?
可以通过$sites[taobao][0]
来获取map中的数据
逻辑语句
与
java
一样
while
while (条件)
{
要执行的代码;
}
do...while
do
{
要执行的代码;
}
while (条件);
函数定义
语法
function functionName()
{
要执行的代码;
}
说明:参数可以设置默认值
function fn($a = 1,$b = 2){
echo $a;
echo '<br>';
echo $b;
}
魔法变量
__LINKE__
当前行数__FILE__
__DIR__
__FUNCTION__
__CLASS__
__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__
__NAMESPACE__
:命名空间,namespace MyProject
高级特性
表单
提交给自身:
<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>
正则方法校验
preg_match()
校验输出
test_input()
- $_GET()与$_POST
对象
日期
string date ( string $format [, int $timestamp ] )
文件操作
打开一个文件
fopen()
案例:
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
关闭一个文件
fclose($file);
检测文件末尾
if (feof($file)) echo "文件结尾";
行读取文件
echo fgets($file). "<br>";
字符读取
echo fgetc($file);
文件上传
$_FILES
:表示上传文件的对象
\(_FILES["file"]["name"] - 上传文件的名称
\)_FILES["file"]["type"] - 上传文件的类型
\(_FILES["file"]["size"] - 上传文件的大小,以字节计
\)_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"] - 由文件上传导致的错误代码
限制
cookie
setcookie(name, value, expire, path, domain);
说明:
1. name:key
2. value:值
3. expire :有效期
4. path:
5. domain : 主域
6. 获取cookie的值: $_COOKIE[]
SESSION
开始
session_start()
获取
$_SESSION[]
消除值
unset()
判断是否有相关值
isset()
销毁
session_destroy();
使用email
方法
mail(to,subject,message,headers,parameters)
说明
- to :接受者
- subject :主题
- message :消息
- headers :标题
- paramters :额外的参数
案例
<?php
$to = "someone@example.com"; // 邮件接收者
$subject = "参数邮件"; // 邮件标题
$message = "Hello! 这是邮件的内容。"; // 邮件正文
$from = "someonelse@example.com"; // 邮件发送者
$headers = "From:" . $from; // 头部信息设置
mail($to,$subject,$message,$headers);
echo "邮件已发送";
?>
安全校验
1. spamcheck()
:email 是否合法
2. filter_var($field, FILTER_SANITIZE_EMAIL);
3. filter_var($field, FILTER_VALIDATE_EMAIL)
json
json_encode
:
json_decode
:
xml
- 加载输出 或者 simplexml_load_file();
$xmlDoc = new Document();
$xmlDoc->load('note.xml');
$x = $xmlDoc->documentElement;
foreach ($x->childNodes AS $item)
{
print $item->nodeName . " = " . $item->nodeValue . "<br>";
}
数据库
连接:
$servername = "localhost";
$username = "username";
$password = "password";
$conn = new mysqli($servername, $username, $password);
//$conn = mysqli_connect($servername, $username, $password);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "连接成功";
执行sql
$conn->query($sql) === TRUE
//mysqli_query($conn, $sql)
// mysqli_multi_query($conn, $sql):多条记录
预处理
使用mysqli
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 预处理及绑定
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);
// 设置参数并执行
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();
$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$stmt->execute();
echo "新记录插入成功";
$stmt->close();
$conn->close();
通常使用的PDO来做预处理操作
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// 设置 PDO 错误模式为异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 预处理 SQL 并绑定参数
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email)
VALUES (:firstname, :lastname, :email)");
$stmt->bindParam(':firstname', $firstname);
$stmt->bindParam(':lastname', $lastname);
$stmt->bindParam(':email', $email);
// 插入行
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
// 插入其他行
$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();
// 插入其他行
$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$stmt->execute();
echo "新记录插入成功";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>
读取数据
PDO
- 设置成关联数组
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
- 遍历获取值
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v;
}
$dsn = null;
mysqli
- 获取值
$result->num_rows
获取当前的行数 - 遍历
while($row = $result->fetch_assoc()) {
echo "<br> id: ". $row["id"]. " - Name: ". $row["firstname"]. " " . $row["lastname"];
}
} else {
echo "0 个结果";
}
到此基础部分已经结束,但是呢,我们的工作才刚刚开始,那么学完之后,我们需要做的事情是什么呢?
- get,post 请求后台返回一个页面,获取参数
- 页面的文件上传功能
- 文件下载功能的实现
- 返回一个验证码功能
- 返回一个json 数据
- 设置session,设置cookie, 与redis 整合。
- 使用webservice
- 预定义的变量