<?php
//demo01
//加载用户的自定义模板:include:本质:是一个语言结构,不是函数!!!但支持函数方式:如第四行;
//以下的方式都ok!而且文件加载失败,并不影响文件继续执行
include 'templet.html';
include('templet.html');
$file="templet.html";
include $file;
include "$file";
//用表达式也行:
$aaa="templet";
include $aaa.'.html';
//以下实例很好:1.可以用:!include '' 来判断是不是未加载;
// 2.可以用:@ 抑止符来阻止报错;
if(@!include 'templet1.html'){
include 'default.html';
echo '如果看到我,说明程序没有因文件加载失败而终止;';
}
//还可以用以下方式来判断:
if(file_exists($file)&& is_file($file)){
include $file;
}else {
include 'default.html';
}
//demo02
//include_once():仅允许加载一次;
//全局成员:函数,常量,类,接口;
//不支持函数重载:函数重载:如果两个函数,名字一样,参数不一样,也不行,不支持;
//举例:见:common.php
//include_once():加载前会检查该文件是否已经加载过了,去重检查
include_once 'common.php';
include_once 'common.php';
echo fetch();
//demo03
//require:强制加载:如果没有实现,会报错!并且,下面的代码也不会被执行;
/*
require 'config.php';
require 'config1.php';//如果没有实现,会报错!并且,下面的代码也不会被执行;
require 'config.php';//重名也报错,并且下面代码不会执行;
*/
require_once 'config.php';
require_once 'config.php';//注意:这样写没问题,不报错,下面代码也执行!!!
//require_once:强制去重加载;
echo '下面代码有没有执行呢?<br>';
//demo04文件加载和作用域:同一作用域下,文件外部变量可以在文件内使用;
$bbb='php中文网';
include 'file1.php';//有意思的是:这里运行时,$bbb有值,而下面函数中include时就没有值;
echo '<hr>';
//函数作用域
function test2(){
//global $bbb;所以,要将这一行代码放进来,就能找到$bbb了!!!!!!!
include 'file1.php';//有意思的是:这里运行时,$bbb没有值;原因:在函数中,不认识程序外部的全局变量,所以不认识;
//
echo $email;
}
test2();
echo '<hr>';
function test3(){
include 'file2.php';
echo $goods;
}
test3();
echo '<hr>';
//demo06
//类的声明与实例化
class Goods{
}
$goods=new Goods();
//函数:判断一个对象是不是一个类的实例:instanceof:
var_dump($goods instanceof Goods);
echo '<hr>';
echo get_class($goods);
echo '<br>';
//支持类名赋值给变量----动态类;
$class='Goods';
$obj=new $class();
var_dump($obj instanceof Goods);
echo '<br>';
//类名是需要大写的,如果拿到的字符串是小写,可以用函数ucfirst()将它变为合法的类名;
$class=ucfirst('goods');
//demo07
class User{
//类中成员的作用域:
//常规属性:其中:非法属性有:
/*
* 1.不能以变量来赋值:例:public $age=$aa;
* 2.不能以其他类属性来赋值:例:public $user=$this->name;
* 3.不能以表达式来赋值:例:public $total=$price*9;
* 4.不能以函数来赋值:例:public $createtime=time();
* */
public $name='胡八一';
public $age=40;
public $option=[1,2,3];
public $output=<<<'RES'
<h3>中国必胜</h3>
RES;
public $emael='peter@php.cn';
//静态属性:
public static $nationality='中国/CHINA';
//抽象属性:(没有被初始化,默认值是null)
public $salary;
//注意;抽象属性只能这样赋值;如果:
//public $salary=null;这样是不行的!这就不再是抽象属性了;
}
$user=new User;
echo "姓名:{$user->name},年龄:{$user->age}<br>";
echo $user->output.'<br>';
//问题:heredoc中,可以解析变量,当类属性是一个heredoc时,heredoc中的变量会不会被解析呢?
//回答:不会!!!因为类属性不允许是变量,和heredoc冲突时,按照类属性的要求来!!!
//访问静态属性:使用范围解析符,双冒号::;
echo User::$nationality;
echo '<br>';
$user->name='王胖子';
echo $user->name;
echo '<br>';
User::$nationality='中国/CHINA!YE!';
echo User::$nationality;
echo '<br>';
var_dump($user->salary);
echo '<br>';
var_dump(is_null($user->salary));
echo '<br>';