当用户浏览某页面时需要转向到注册页面,注册完成后希望用户能返回到之前想访问的页面,这个类或许有用,目前该类还在完善中.
<?php
/*
* @author badboy
* @2009-5-27
* @php4 类语法
* 类Tracker用于跟踪用户访问页面
* 页面信息存放于Cookie中,如果Cookie被禁用,此类将不起作用.
*/
class Tracker
{
var $max_pages = 10 ; //最多保留多少个页面信息
var $trackStack; //踪迹栈
var $cookieName; //cookie名称,默认为 $_SERVER['HTTP_HOST'].'_PAGE_TRACK'
/*
* 构造方法
*/
function Tracker()
{
$this->trackStack=array();
$this->cookieName = '_PAGE_TRACK';
$this->loadFromCookie();
//移除过多的页面
if(count($this->trackStack)>$this->max_pages)
{
for($i=0;$i<count($this->trackStack)-$this->max_pages;$i++)
{
array_shift($this->trackStack);
}
}
}
/*
* 将页面信息保存到记录栈中,此方法被重截.
* 无参数版本表示将当前页加到踪迹栈中
* 有参数版本表示将指定页加到踪迹栈中
*/
function addPage()
{
$num_args = func_num_args();
$arr_args = func_get_args();
switch($num_args)
{
case 0:
$this->addPageOverloading_1();
break;
case 1:
$this->addPageOverloading_2($arr_args[0]);
break;
}
}
function addPageOverloading_1()
{
$page = urlencode($_SERVER['SCRIPT_NAME'].'?'.$_SERVER['QUERY_STRING']);
if($page!=$this->trackStack[count($this->trackStack)-1])
{
$this->trackStack[]=$page;
}
$this->mapToCookie();
}
function addPageOverloading_2($page)
{
$page = urlencode($page);
if($page!=$this->trackStack[count($this->trackStack)-1])
{
$this->trackStack[]=$page;
}
$this->mapToCookie();
}
/*
* 清除记录
*/
function clear()
{
$this->trackStack=array();
$this->mapToCookie();
}
function mapToCookie()
{
$cookies = implode('|||',$this->trackStack);
setcookie($this->cookieName,$cookies);
}
/*
* 从Cookie读取页面记录到$trackStack;
* 它们以|||分隔
*/
function loadFromCookie()
{
$cookies = $_COOKIE[$this->cookieName];
if(!$cookies)
return;
$this->trackStack = explode('|||',$cookies);
}
/*
* 返回栈中的页面
* 参数-1表示返回倒数一个页面,-2表示倒数第2个页面,0或空表示返回栈底的页面
* 此方法被重载
*/
function getPage()
{
$num_args = func_num_args();
$arr_args = func_get_args();
switch($num_args)
{
case 0:
return $this->getPageOverloading_1();
break;
case 1:
return $this->getPageOverloading_2($arr_args[0]);
break;
}
}
function getPageOverloading_1()
{
return urldecode($this->trackStack[0]);
}
function getPageOverloading_2($position)
{
if($position==0)
{
return $this->getPageOverloading_1();
}
else
{
return urldecode($this->trackStack[count($this->trackStack)+$position]);
}
}
}
?>
分享到:
相关推荐
这个类的设计目的是通过运算符重载提供一种方便的方式来处理时间,使得代码更加直观和易于理解。 首先,让我们深入了解什么是时钟类。时钟类是一种面向对象的编程结构,它模拟了现实世界中的时钟。这个类通常包含三...
根据给定的信息,本文将详细解释如何通过C++中的运算符重载来设计并实现一个二维方阵类`matrix`,其中包括矩阵加法、减法、乘法以及矩阵的转置操作。 ### 1. 类定义及成员变量 在代码中,首先定义了一个名为`...
"类运算符重载设计定义一个二维方阵类 matrix" 本节将详细讲解类运算符重载设计定义一个二维方阵类 matrix,通过重载二元运算符“+”、“-”、“*”和一元运算符“~”,来实现矩阵加、矩阵减、矩阵乘以及矩阵转置。...
4. 除法(`/`):重载`operator/`,需要将第一个分数的分子乘以第二个分数的分母,再将第一个分数的分母乘以第二个分数的分子,最后进行约分。 5. 约分(`~`):分数类可能还提供了一个单目操作符`operator~`,用于...
例如,如果你定义了一个表示时间的类`Time`,通过重载操作符`+`,用户可以方便地将两个`Time`对象相加,表示时间的累加,而无需使用晦涩的函数调用。这样既提高了代码的可读性,也简化了表达复杂的逻辑。 二、操作...
操作符重载是面向对象编程中的一个重要概念,它允许程序员为类定义特定的操作符的行为,使得这些操作符能够用于类的对象上。 描述中首先对“类”进行了定义,类可以理解为一系列具有相同属性和行为的数据集合。类在...
例如,如果我们有一个表示线段或边长的类,重载"+"可以使我们能够轻松地将两个线段相加,得到一个新的线段。在这个项目中,重载的"+"可能接收两个边长作为参数,并返回它们的和,这个和将用于检查是否满足三角形的...
在C++编程语言中,运算符重载...这个例子展示了如何通过运算符重载成员函数实现复数类的加减法运算,使得用户可以像处理基本数据类型一样方便地处理复数对象。在实际应用中,这样的设计可以提高代码的可读性和易用性。
例如,我们可以重载"+"运算符使得两个数组类对象相加,或者重载"[]"运算符使得可以像访问普通数组一样访问类对象的元素。 在`Array.h`头文件中,我们可能会定义一个名为`Array`的类,它表示一个动态数组。这个类...
4. 方法重载可能体现在子类中,同一个方法名称根据不同的参数实现不同的功能。 5. 案例可能包括实例化不同类的对象,并调用相同名称但参数不同的方法,展示出方法重载的效果。 通过实践这个小程序,你可以更好地...
利用C++实现Point类重载运算符。利用C++实现Point类重载运算符。
定义一个时间类用来保存时间,通过重载操作符“+”实现两个时间的相加
在C++编程语言中,运算符重载是面向对象特性的一部分,它允许程序员为自定义类型(如这里的“复数类”)赋予已有的运算符新的含义。这使得使用自定义类型的代码更接近自然语言,提高了可读性和易用性。在VC++环境下...
在Delphi编程中,记录(Record)类型是一种非常强大的工具,它可以用来封装多个相关的数据项。这个主题,"delphi 记录体类型妙用",涵盖了如何有效地利用记录类型来提升代码的可读性、效率和灵活性。下面将详细讨论...
成员函数作为类的一部分,通常需要一个隐含的`this`指针,而友元函数则不拥有`this`指针,但可以访问类的私有和保护成员。例如,我们可以为复数类的加法操作定义一个成员函数: ```cpp class Complex { public: ...
String 类个运算符重载 用vc++实现的,而不是库函数里的string
类域 友元 运算符 重载类域 友元 运算符 重载类域 友元 运算符 重载
以下是一个关于如何定义复数类、实现成员函数和友元函数以及重载运算符的详细解释。 首先,我们需要创建一个名为`Complex`的类,其中包含两个私有成员变量,分别代表实部(`real`)和虚部(`imaginary`)。类定义...
接下来,我们将展示一个简单的C++程序,该程序使用上述定义的类和函数重载来实现用户交互式的图形面积计算功能。 ```cpp #include using namespace std; // ...(上面定义的类) int main() { int choice; ...
用c++设计一个三角形类Triangle,包含三角形三条边长的私有数据成员,另有一个重载运算符“+”,以实现求两个三角形对象的面积之和。