变量作用域
局部变量:在函数体内部定义的变量,只在函数内部有效
function demo()
{
$a = 100;
$b = 200;
return $a + $b;
}
echo demo(); // 300
echo $a; //局部变量无法在函数体外被访问到
全局变量:在函数体外部定义的变量
- 全局变量在函数体内部无法直接调用(需要使用 global 关键字,或将全局变量注册到 $GLOBALS 超全局变量)
- 注意:函数体外定义的常量,可以在函数体内部直接调用。
$one = 200;
$two = 300;
const NATION = '中国';
function test()
{
echo NATION; // 常量可以直接调用
echo "运算的结果是" . ($one + $two); // 全局变量无法直接调用
}
test();
// 输出:
// 中国
// Undefined variable: one
// Undefined variable: two
// 1,使用 global 关键字引入全局变量
function test()
{
global $one, $two;
echo "运算的结果是" . ($one + $two);
}
test(); // 运算的结果是500
// 2,将全局变量注册到 $GLOBALS 超全局变量
function test()
{
echo "运算的结果是" . ($GLOBALS['one'] + $GLOBALS['two']);
}
test(); // 运算的结果是500
优化web1项目
1)定义路径常量,用于简化个页面引用模板的路径
定义(配置文件:common.php)
// 路径分隔符
const DS = DIRECTORY_SEPARATOR;
// 根路径 ROOT_PATH
define('ROOT_PATH', $_SERVER['DOCUMENT_ROOT'] . DS . 'web1');
// 数据路径 DATA_PATH
const DATA_PATH = ROOT_PATH . DS . 'data' . DS;
// 模板路径 TMPL_PATH
const TMPL_PATH = ROOT_PATH . DS . 'template' . DS;
// 公共模板路径 TMPL_PUBLIC_PATH
const TMPL_PUBLIC_PATH = TMPL_PATH . DS . 'public' . DS;
// 静态资源路径
const STATIC_PATH = ROOT_PATH . DS . 'static' . DS;
const STATIC_CSS_PATH = STATIC_PATH . DS . 'css' . DS;
const STATIC_JS_PATH = STATIC_PATH . DS . 'js' . DS;
const STATIC_IMG_PATH = STATIC_PATH . DS . 'images' . DS;
各页面简化引用路径
// 引入配置文件:common.php
include __DIR__ . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'common.php';
// 引入头部模板
include TMPL_PUBLIC_PATH . 'header.php';
// 引入数据文件
$news = require DATA_PATH . 'news.php';
$items = require DATA_PATH . 'item.php';
// 引入尾部模板
include TMPL_PUBLIC_PATH . 'footer.php';
2)新闻内容数据动态获取(data/news.php)
// 从聚合数据获取头条新闻列表
// 这里的 key 为模拟数据,实际使用时需改为自己的 key
$res = file_get_contents('http://v.juhe.cn/toutiao/index?type=top&key=257hio90j65few598jhf34xs23');
$data = json_decode($res, true);
$dataContent = $data['result']['data'];
$myData = [];
foreach ($dataContent as $k => $v) {
extract($v);
$arr = array('id' => $k, 'title' => $title, 'url' => $url);
$myData[] = $arr;
}
// 取前10条
$output = array_slice($myData, 0, 10);
return $output;
3)各页面内容由 data 数据动态生成
1,首页
<main>
<!-- 新闻列表 -->
<div class="news">
<h3>新闻列表</h3>
<div class="list">
<?php foreach ($news as $v) : extract($v)?>
<a href="<?= $url ?>"><?= $title ?></a>
<?php endforeach; ?>
</div>
</div>
<!-- 产品列表 -->
<div class="items">
<h3>产品列表</h3>
<div class="list">
<?php foreach ($items as $v) : extract($v) ?>
<div class="item">
<img src="<?= $img ?>" alt="<?= $title ?>" />
<a href="<?= $url ?>">最新产品<?= $id ?></a>
</div>
<?php endforeach; ?>
</div>
</div>
</main>
2,新闻页
<div class="news">
<h3>新闻列表</h3>
<div class="list">
<?php foreach ($news as $v) : extract($v) ?>
<a href="<?= $url ?>"><?= $title ?></a>
<?php endforeach; ?>
</div>
</div>
3,产品页
<div class="items">
<h3>产品列表</h3>
<div class="list">
<?php foreach ($items as $v) : extract($v) ?>
<div class="item">
<img src="<?= $img ?>" alt="<?= $title ?>" />
<a href="<?= $url ?>"><?= mb_substr($title,0,8) ?>...</a>
</div>
<?php endforeach; ?>
</div>
</div>