检测变量
// 获取变量类型
gettype()
// 是否是某种类型
is_int()
is_array()
// 变量是否存在
isset()
// 变量是否为空
empty()
打印变量
echo()// 字符串、数字
print_r()// 数组、对象
var_dump()// 打印变量的类型及其值
类型转换
+// 转number
.// 转字符串
if// 转Boolean
销毁变量
unset()
函数
// 函数就是封装起来的一段代码可以随时调用
如果有默认值参数,应该写在最后
<?php
$a = 7;
function fn(&$a) {
return $a = $a - 1;
}
fn($a);
echo $a;// 6
?>
<?php
$a = 7;
function fn() {
global $a;// 告诉去全局找
return $a;
}
echo fn();
?>
<?php
$a = 1;
$b = 2;
print_r($GLOBALS);// 收集页面中全局变量的全局数组
?>
// 动态调用函数
<?php
function good(){
echo "haha";
}
function bad(){
echo "wuwu";
}
$heart = 'good';
$heart();
?>
时间戳函数
<?php
// 格林威治事件1970年1月1日00:00:00到当前的秒数
echo time()."<br/>";
echo microtime()."<br/>";// 微秒数和时间戳
echo microtime(true);// 合一起输出
?>
// 格式化时间
<?php
echo date('Y/m/d H:i:s');
?>
<?php
// 上一小时的时间
$time = time() - 60 * 60;
echo date('Y/m/d H:i:s', $time);
?>
读取文件夹
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<?php
$path = isset($_GET['dir']) ? $_GET['dir'] : '.';
$fh = opendir($path);
// echo $row = readdir($fh)."<br/>";// 返回文件名
// echo $row = readdir($fh)."<br/>";// 返回文件名
// echo $row = readdir($fh)."<br/>";// 返回文件名
// closedir();
?>
<h1>读取文件夹</h1>
<table border="1">
<tr>
<td>名称</td>
<td>操作</td>
</tr>
<?php while ( ($row = readdir($fh)) !== false ) {// 文件名为0时 ?>
<tr>
<td><?php echo $row; ?></td>
<td>
<a href="index.php?dir=<?php echo $path.'/'.$row; ?>">查看</a>
</td>
</tr>
<?php } ?>
<?php closedir(); ?>
</table>
</body>
</html>
数组
// 索引数组
// 关联数组
<?php
$arr = array('name'=>'Aaayang', 'age'=>18);
echo $arr['name'];
?>
// 遍历数组
<?php
$arr = array('a', 'b', 'c', 'd');
for($i = 0; $i < count($arr); $i ++) {
echo $arr[$i] . "<br/>";
}
?>
// foreach
<?php
$arr = array('a', 'b', 'c', 'd');
foreach ($arr as $key => $value) {
echo $key . '>>' . $value . "<br/>";
}
?>
// foreach简写,foreach不能单循环出键,通过array_keys可以
<?php
$arr = array('a', 'b', 'c', 'd');
foreach ($arr as $value) {
echo $value . "<br/>";
}
?>
// array_keys
<?php
$arr = array('a', 'b', 'c', 'd');
print_r(array_keys($arr));// 返回数组中所有的键
?>
// 修改数组
<?php
$arr = array('a'=>3, 'b'=>4, 'c'=>5);
foreach ($arr as $key => $value) {
$arr[$key] = $value * 2;
}
print_r($arr);
?>
static
<?php
function a() {
$a = 5;
$a += 1;
return $a;
}
echo a() . "<br/>";// 6
echo a() . "<br/>";// 6
?>
<?php
function a() {
static $a = 5;
$a += 1;
return $a;
}
echo a() . "<br/>";// 6
echo a() . "<br/>";// 7
?>
// 应用
<?php
function openfile($file) {
$fh = fopen($file, 'r');
return $fh;
}
// 打开了3次
print_r(openfile('.'));
print_r(openfile('.'));
print_r(openfile('.'));
function openfile($file) {
static $fh = null;// 记住了上次的$fh
if($fh === null) {
$fh = fopen($file, 'r');
}
return $fh;
}
// 实际打开了1次
print_r(openfile('.'));
print_r(openfile('.'));
print_r(openfile('.'));
?>
类
<?php
class Comment {
public $username;
public $content;
public function setUsername($username) {
$this->username = $username;
}
public function getUsername() {
return $this->username;
}
}
class CommentList {
const FilePath = "commentList.txt";
public function getCommentList() {
return unserialize(file_get_contents(self::FilePath));// 获取值的姿势
}
public function write($commentData) {
$commentList = $this->getCommentList();
}
}
?>
// 访问私有变量的套路
<?php
class Comment {
private $username;
public $content;
public function set($name, $value) {
$this->$name = $value;
}
public function get($name) {
return $this->$name;
}
}
// 访问私有属性的姿势
$comment = new Comment();
$comment->set('username','Aaayang');
echo $comment->get('username');
?>
// 魔术方法
<?php
// 魔术方法自动调用
class Comment {
private $username;
public $content;
public function __set($name, $value) {
$this->$name = $value;
}
public function __get($name) {
return $this->$name;
}
}
// 有魔术方法的情况下可以直接访问私有
$comment = new Comment();
$comment->username = "Aaayang";
echo $comment->username;
?>
// 访问类常量
<?php
class CommentList {
const FilePath = "commentList.txt";
public function getCommentList() {
return unserialize(file_get_contents(self::FilePath));// 获取值的姿势
}
public function write($commentData) {
$commentList = $this->getCommentList();
}
}
// 访问类常量
$commentList = new CommentList();
echo $commentList::FilePath;
?>
// 静态属性和方法不需要实例化可以直接调用
<?php
class Tools {
public static $titleTemp = 'Aaayang';// 静态属性属于类本身,不需要实例化就能调用
public static function parseTitle($title) {// 静态方法中不能调用非静态属性和非静态方法
return $title . '-_-'.self::$titleTemp;// 调用静态属性
}
public function test() {
self::parseTitle('haha');// 非静态方法中调用静态方法
}
}
// echo Tools::$titleTemp;// 静态属性和方法不需要实例化就能调用
echo Tools::parseTitle("VIP");
?>
<?php
// 构造方法:对象被创建时自动调用的方法,一般做初始化工作时使用
// 析构函数:对象在内存中被销毁时自动调用,不能带参数
class Pager {
public $page;// 当前页
public $totalPage;
public $link;
public function __construct($totalPage, $link, $page=1){
$this->page = $page;
$this->totalPage = $totalPage;
$this->link = $link;
}
}
$pager = new Pager(10, 'http://baidu.com', 2);
print_r($pager);
?>
// 构造方法
<?php
class BaseClass {
public $user;
public function error() {
echo "404<br/>";
}
public function __construct() {
echo "验证<br/>";
}
}
class SubClass extends BaseClass {
public function __construct() {
parent::__construct();// 执行父类的构造方法
echo "验证2";
}
public function test() {
$this->user;
$this->error();// 会调用本身的
}
public function error() {
echo "error";
}
}
$subClass = new SubClass();// 子类没有构造函数会直接调用父类的
?>