1、PHP与html环境
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- 退出html,进入php环境 -->
<?php
//php代码,在服务器上执行
?>
<!-- 退出php环境,进入html -->
<!-- 如果被包含的是php代码 -->
<?php
?>
<!-- 如果被包含的是html -->
<!-- 直接写 -->
<!-- 我们的包含文件有两种 -->
<!-- 一种是纯的php代码 -->
<!-- 另一种是html代码 -->
<!-- 如果被包含的是php代码,我们不需要写结束标记 -->
<!-- 因为我们把当前的php代码嵌入到另一个文件中时,该文件也要执行php代码才能加载被引入的外部文件 -->
<!-- 然后通过数组的脚本来退出 -->
</body>
</html>
2、文件包含
<?php
namespace _0812;
use DirectoryIterator;
//文件包含
//本质,将外部文件的内容,插入到当前的位置
//include
//使用相对路径
include 'inc/f1.php';
//推荐使用绝对路径,可以忽略配置文件的设置,加载起来更快
//包含的文件与当前的脚本公用一个作用域
echo $username . '<hr>';
//__DIR__可以返回当前脚本在服务器上所在的路径
echo __DIR__ . '/inc/f1.php' .'<hr>';
//使用DIRECTORY_SEPARATOR常量,规范路径书写
echo __DIR__ .DIRECTORY_SEPARATOR. 'inc'.DIRECTORY_SEPARATOR.'f1.php'.'<hr>';
$user = include 'inc/f1.php';
list('username' => $name, 'email' => $email) = $user;
echo $username . ',' . $email . '<hr>';
echo join(',',$user) . '<hr>';
vprintf('%s,%s',$user);
echo '<hr>';
//require
$fileName = __DIR__ . '/inc/f12.php';
if(file_exists($fileName)){
require $fileName;
}else{
echo '文件不存在';
}
// die('程序中断');后面的就不执行了
//exit('代码中断');后面的就不执行了,与die类似
echo $username1;
//include,require,功能一样,区别在于出错的处理上
//include:忽略错误,继续执行后面的代码,require,直接退出
上述运行结果:
3、类的声明与实例化
<?php
namespace _0812;
//对象是一个容器,是全局成员的一个前缀
//以人为例,类是筛选标准,小明符合标准,小明就是这个类的实例化
//类:全局成员,声明:class,大驼峰命名,如UserName(帕斯卡命名)
//1.类的声明
class Goods
{
//...
}
//2.类的实例化
$goods = new Goods();
//实例总是与一个类绑定,是某个类的实例
//对象更通用一些,在不引起歧义的情况下,实例其实就是对象
//如果实在要区分,那么实例化是一个过程,但是没有对象化一说
//3.类的判断
var_dump($goods instanceof Goods);
echo '<hr>';
echo get_class($goods) . '<hr>';
//动态类
//控制器就是一个动态类,控制器名称出现url
$controller = ucfirst('goods');
//UserController.php
// $controller = ucfirst('goods') . 'Controller';
$obj = new $controller();
var_dump($obj);
上述运行结果:
4、类成员
<?php
namespace _0812;
/**
* 类成员
* 1.实例成员
* 2.静态成员
*/
class User1
{
//1.实例成员
//(一)属性,变量的语法
//public:默认
public $username = '张老师';
//私有只能在当前的类中使用
private $salary = 24567;
public $role = '太太';
private $age = 18;
//(二)方法:函数的语法
public function getSalary()
{
//$user = new User1;
//$this:和当前类实例绑定
//只要前面写$符,后面的属性就可以不用写了
return $this->salary;
}
public function getAge()
{
//类的内部:用$this
return $this->age;
}
//获取器 __get(要获取的属性名) :魔术方法,双下划线开始的系统方法
//$name:要获取的属性名
public function __get($name){
//通过请求拦截可以设置一些过滤规则
if($name === 'salary')
{
if($this->role === '太太')
{
return $this->$name;
}
return $this->$name -1000;
}
return $this->$name;
}
//修改器/设置器 __set(属性,值) :魔术方法,双下划线开始的系统方法
public function __set($name,$value)
{
if($name==='age')
{
if($value >= 18 && $value <= 50)
{
$this->$name = $value;
}else{
echo '年龄越界';
}
}
}
//__get __set,成员访问拦截器,拦截非法访问
}
//实例化
//在类的外部,用对象访问成员
$user1 = new User1();
echo $user1->username . '<hr>';
// echo $user1->salary . '<hr>';
echo $user1->getSalary() . '<hr>';
echo $user1->getAge() . '<hr>';
echo $user1->salary . '<hr>';
echo $user1->age . '<hr>';
$user1->age = 58;
echo $user1->age . '<hr>';
上述运行结果:
5、成员访问
<?php
namespace _0812;
/**
* 类成员
* 1.实例成员:用对象访问,$this->对象引用
* 2.静态成员 static:用类访问,self::->类引用
*/
class User2
{
public $username = '张老师';
private $salary = 3000;
private $age = 28;
//当前类实例的状态(属性值)应该由用户来决定,而不是由类来写死
//构造方法:魔术方法,不用用户主动调用,由某个事件或动作来触发
//__get,__set
//构造方法,实例化该类时,会自动触发
public function __construct($username,$salary,$age,$nation='China')
{
$this->username = $username;
$this->salary = $salary;
$this->age = $age;
//静态成员可以用构造函数进行实例化
//初始化静态属性
self::$nation = $nation;
}
//静态成员 static
//静态属性
public static $nation = '中国';
//静态方法
public static function hello()
{
//类的内部可以不用类名,用::self来引用当前类或者用::static
// return 'Hello,' . User2::$nation;
return 'Hello,' . self::$nation;
}
}
$user2 = new User2('李老师',2800,30);
echo $user2->username . '<br>';
$user3 = new User2('朱老师',3200,32);
echo $user3->username . '<br>';
// echo $user3->$nation . '<hr>';访问不到
echo User2::$nation . '<hr>';
echo User2::hello() . '<hr>';
$user4 = new User2('刘老师',3500,35);
echo User2::$nation;
$user4 = new User2('刘老师',3500,35,'中国');
echo User2::$nation;
上述运行结果: