我正在阅读一本PHP初学者的书,并在继续之前检查所有的练习以确保我完全理解,我被卡住了,为什么我不能让我的CSS方法工作。我已经创建了一个方法,使我能够在一个页面上声明两个CSS文件(index.php)。我不确定这是否是最佳实践,但我是初学者,所以请与我一起,它在我的书中,所以我想知道我哪里出错了。
提前谢谢你:)
这是我的index.php,我在这里调用addCSS函数
<?php
//this correctly outputs any errors
error_reporting( E_ALL );
ini_set("display_errors", 1);
include_once "classes/Page_Data.class.php";
//creates a new object from our custom made class Page_Data which can be found in Page_Data.class.php
$pageData = new Page_Data();
$pageData->title = "Image gallery";
$pageData->content = include_once "views/navigation.php";
$pageData->addCSS = ('css/layout.css');
$pageData->addCSS = ('css/navigation.css');
$navigationIsClicked = isset($_GET['page']);
if ($navigationIsClicked) {
$fileToLoad = $_GET['page'];
}
else {
$fileToLoad = "gallery";
}
$pageData->content .= include_once "views/$fileToLoad.php";
$page = include_once "templates/page.php";
echo $page;
这是我的Page_Data.class.php
<?php
class Page_Data {
public $title = "";
public $content = "";
public $css = "";
public $embeddedStyle = "";
public function addCSS( $href ) {
$this->css .= "<link href = '$href' rel='stylesheet' />";
}
}
这是我的page.php,这是我的母版或模板页面。
<?php
return "<!DOCTYPE html>
<html>
<head>
<title>$pageData->title</title>
<meta http-equiv='Content-Type' content='text/html;charset=utf-8'/>
$pageData->css
$pageData->embeddedStyle
</head>
<body>
$pageData->content
</body>
</html>";
navigation。CSS在我的CSS文件夹
nav a{
text-decoration: none;
color: black;
}
nav a:hover {
text-decoration: underline;
}
layout。CSS在CSS文件夹
h1 {
color: red;
}
让我们回顾一下你的代码
- 作为建议,我会为我的PageData类添加一个方法,并将其命名为getCssLinks()。getCssLinks将返回css属性。现在css不能像这样从类外修改,只能通过合法的方式修改。
$pageData = new Page_Data();
$pageData->css = '<script>alert('hey i am here because css attribute is not protected')';
所以我的Page_Data类会是这样的
<?php
class Page_Data {
public $title = "";
public $content = "";
protected $css = "";
public $embeddedStyle = "";
public function addCSS( $href ) {
$this->css .= "<link href = '$href' rel='stylesheet' />";
}
public function getCssLinks()
{
return $this->css;
}
}
- 现在我们需要跟踪我们的css文件。因此,我们可以将css文件存储在数组中,并让getCssLinks处理将它们转换为有效的html链接。
<?php
class Page_Data {
public $title = "";
public $content = "";
protected $cssLinks = [];
public $embeddedStyle = "";
public function addCSS( $href ) {
$this->css [] = $href;
}
public function getCssLinks()
{
$htmlOutput = '';
foreach($this->cssLinks as $cssLink)
{
$htmlOutput .= "<link href = '$cssLink' rel='stylesheet' />";
}
return $htmlOutput;
}
}
这将帮助我们知道包含哪些css文件,并使用一些帮助我们能够从列表中删除或添加css文件。
您也可以为您的content方法这样做。这使您的代码更加干净和可维护。另一个优点是你不需要担心在模板中连接内容。
title和其他属性可以有自己的setter和getter。
public function setTitle($title)
{
$this->title = $title;
}
public function getTitle()
{
return $this->title;
}
- 按照RFC建议的方式命名你的类是很好的。所以PageData代替Page_Data。
毕竟,您选择呈现html模板的方式和您对最佳实践的关注表明您是多么小心,这是正确的。但总有很长的路要走。继续加油。