| 网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 |
![]() |
| Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道 |
当你声明一个类,你需要列出对象应有的所有变量和所有函数—被称为属性和方法. 3.1.1中显示了一个类的构成. 注意在大括号({})内你只能声明变量或者函数. 3.1.2中显示了如何在一个类中定义三个属性和两个方法. 网管网www_bitscn_com
3.1.1 中国网管联盟bitsCN.com
class Name extends Another Class
{
Access Variable Declaration
Access Function Declaration
}
网管下载dl.bitscn.com
3.1.2
网管联盟bitsCN_com
<?php
//定义一个跟踪用户的类
class User
{
//属性
public $name;
private $password, $lastLogin; 网管论坛bbs_bitsCN_com
//方法
public function __construct($name, $password)
{
$this->name = $name;
$this->password = $password;
$this->lastLogin = time();
$this->accesses++;
} 网管bitscn_com
// 获取最后访问的时间
function getLastLogin()
{
return(date("M d Y", $this->lastLogin));
}
}
//创建一个对象的实例
$user = new User("Leon", "sdf123");
网管u家u.bitsCN.com
//获取最后访问的时间
print($user->getLastLogin() ."<br>n");
//打印用户名
print("$user->name<br>n");
?> 网管联盟bitsCN@com
当你声明属性,你不需要指明数据类型. 变量可能是整型,字符串或者是另一个对象,这取决于实际情况.在声明属性时增加注释是一个好主意,标记上属性的含义和数据类型. 网管u家u.bitscn@com
当你声明一个方法,你所做的和在类外部定义一个函数是一样的. 方法和属性都有各自的命名空间. 这意味着你可以安全地建立一个与类外部函数同名的方法,两者不会冲突. 例如,一个类中可以定义一个名为date()的方法. 但是你不能将一个方法命名为PHP的关键字,如for或者while.
网管u家u.bitscn@com
类方法可能包含PHP中所谓的type hint. Type hint 是另一个传递参数给方法的类的名字. 如果你的脚本调用方法并传递一个不是类的实例的变量,PHP将产生一个”致命(fatal)错误” . 你可能没有给其它类型给出type hint,就像整型,字符串,或者布尔值. 在书写的时候, type hint是否应当包含数组类型仍存在争议. 网管u家u.bitscn@com
Type hint是测试函数参数或者运算符的实例的数据类型的捷径. 你可能总是返回这个方法. 确认你强制让一个参数必须是哪种数据类型,如整型. 3.2.1 确保编译类只产生Widget的实例. 网管联盟bitsCN@com
3.2.1
网管下载dl.bitscn.com
<?php
//组件
class Widget
{
public $name='none';
public $created=FALSE;
} 网管u家u.bitscn@com
//装配器
class Assembler
{
public function make(Widget $w)
{
print("Making $w->name<br>n");
$w->created=TRUE;
}
} 网管联盟bitsCN@com
//建立一个组件对象
$thing = new Widget;
$thing->name = 'Gadget';
//装配组件
Assembler::make($thing);
?>
除了传递参数的变量外,方法含有一个特殊的变量. 它代表类的个别实例. 你应当用这个来指向对象的属性和其它方法.一些面向对象的语言假设一个不合格的变量提交给本地属性,但在PHP中方法的任何变量只是在方法的一定范围内. 注意在User类的构造函数中这个变量的使用(3.1.2).
PHP在属性和方法声明前定义一个访问限定语,如public,private和protected. 另外,你可以用”static”来标记一个成员. 你也可以在类中声明常量. 本章稍后会有不同访问方式的相关讨论. 网管下载dl.bitscn.com
你可以在一行中列出相同访问方最近问无限分类的类树问题比较多,所以一高兴自己写了一个,我刚写完的,大家用用看,看看怎么实现起来更快,更简单,把你的树也贴出来(要只查询一次数据库的)<br>
这是一棵分类列表的类树, 支持无限分类<br>
一个分类下面可以同时有"包含子类的分类"和"最终分类";<br>
网管网www.bitscn.com
唯一的优点是*****只需要进行一次的数据库*****查询.<br>
样子不是很好看,不过可以自定义修改,可以自己定义css加里面<br>
缓存方面还没有作,可以自己补上
下面例子的目录结构是这样的。
¦--Catagory.php <br>
¦--images----tree.jsp <br>
¦--images----treeopen.gif <br>
¦--images----treeclose.gif <br> 网管论坛bbs_bitsCN_com
¦--images----line.gif <br>
/****************tree.jsp********************/
function expand(id){
node = document.all('node'+id);
if(node.style.display==''){
node.style.display = 'none';
document.images('img'+id).src = imgopen;
}else{
网管联盟bitsCN@com
网管u家u.bitsCN.com
中国网管论坛bbs.bitsCN.com
网管网www.bitscn.com
网管u家u.bitscn@com
网管联盟bitsCN_com
* 样式可以根据自己的需要任意修改 ,但是不能删除现有的元素
*/
var $blockTpl = '
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2"><a onclick="expand(__id__); return false;" href="#">
<img src="__image__" border="0" width="15" height="15" id="img__id__"></a>
<a onclick="expand(__id__); return false;" href="#">
__name__</a></td>
</tr> 网管下载dl.bitscn.com
<tr id="node__id__" style="display:__open__;">
<td width="20"></td><td>__inner__</td>
</tr>
</table>';
/*
* 这个是小分类的模板
*
* see $blockTpl
*/
var $elementTpl = '<img src="images/line.gif" width="15" height="15"><a href="?id=__id__"><font color="white">__name__</font></a><br/>'; 网管bitscn_com
/*
* 这个是当前位置显示模板
*
* see $blockTpl
*/
var $currentTpl = '<a href="?id=__id__"><font color="white">__name__</font></a>';
var $js = "images/tree.js";
var $imgOpen = 'images/treeopen.gif';
var $imgClose = 'images/treeclose.gif';
var $imgLine = 'images/line.gif';
网管下载dl.bitscn.com
网管网www.bitscn.com
foreach($tmpData as $value){
$treeData[$value['id']] = $value;
$plevel[$value['pid']][$value['id']] = 'END';
$clevel[$value['id']] = $value['pid'];
}
$this->treeData = &$treeData;
网管下载dl.bitscn.com
中国网管论坛bbs.bitsCN.com
网管联盟bitsCN_com
网管bitscn_com
网管联盟bitsCN@com
function _jsParse(){
$str = "<script language=\"javascript\">
imgopen = \"$this->imgOpen\";
imgclose = \"$this->imgClose\";
</script><script src=\"$this->js\" language=\"javascript\"></script>"; 网管bitscn_com
return $str;
}
/*
* 展开分类$cataId
*
*param $cataId int 要展开的分类的编号
*/
function parseCurrent($cataId){
$str = '';
$str .= $this->_parseCurrentTpl($cataId);
while(isset($this->treeCList[$cataId]) && $this->treeCList[$cataId]!=0){
网管联盟bitsCN_com
网管u家u.bitscn@com
网管u家u.bitscn@com
return $this->currentStr;
}
/*
* 返回分类的类树
*/
function getTreeStr(){
return $this->treeStr;
}
function setTpl($blockTpl, $elementTpl, $currentTpl, $js){
$this->blockTpl = $blockTpl;
$this->elementTpl = $elementTpl;
网管bitscn_com
网管网www.bitscn.com
echo "<body bgcolor=\"blue\">";
$tree = new Catagory($data);
echo "<hr>下面是当前分类的类树<hr>";
//$tree->setExpend(1);
$tree->parseNode(0);
//$tree->parseNode(1);
//$tree->expand(9);
echo $tree->getTreeStr();
echo "<hr>下面是当前分类(分类的编号是9)的路径<hr>";
$tree->parseCurrent(9);
echo $tree->getCurrentStr();
网管u家u.bitscn@com
式的几个属性,用逗号来分隔它们. 在3.1.2中,User类有两个private属性--$password和$lastLogin。
|
0
|
评论加载中…