首页 > 编程技术 > php

抽象方法和抽象类

发布时间:2016-11-25 17:13

面向对象程序通过类的分层结构构建起来. 在单重继续语言如PHP中, 类的继续是树状的. 一个根类有一个或更多的子类,再从每个子类继续出一个或更多下一级子类. 当然,可能存在多个根类,用来实现不同的功能. 在一个良好设计的体系中,每个根类都应该有一个有用的接口, 可以被应用代码所使用. 假如我们的应用代码被设计成与根类一起工作,那么它也可以和任何一个从根类继续出来的子类合作.

  抽象方法是就像子类中一般的方法的占位符(占个地方但不起作用),它与一般方法不同

利用static实现表格的颜色隔行显示
在实际编程应用中我们对STATIC的功能经常遗忘。要好好反省。。:)

我们用PHP从数据库查询数据,并将结果输出到浏览器上,假如结果有很多行,表格的bgcolor假如全是单色的,浏览者会感觉不太舒适。那麽怎样做使表格各行的颜色不同呢?
请看下面:
<?
function getcolor()
{
static $colorvalue;//定义一个静态变量
if($colorvalue=="#ffffff")
$colorvalue="#000000";
else $colorvalue="#ffffff";
return($colorvalue);
}

print("<table border=1>n");//下面输出10行
for($i=0;$i<10;$i )
{ $bcolor=getcolor();//换背景颜色
print("<tr bgcolor=$bcolor>n");
print("<td>$i</td>n");
print("</tr>");
}
print("</table>n");
说明:
此程序中定义了一个静态变量static $colorvalue意思是在函数调用结束后,
此变量$colorvalue还保留值,没有消失。当再次调用getcolor()函数时,变量$colorvalue的值是上次函数调用结束时$colorvalue的值。

类的静态成员与一般的类成员不同: 静态成员与对象的实例无关,只与类本身有关. 他们用来实现类要封装的功能和数据,但不包括特定对象的功能和数据. 静态成员包括静态方法和静态属性.

  静态属性包含在类中要封装的数据,可以由所有类的实例共享. 实际上,除了属于一个固定的类并限制访问方式外,类的静态属性非常类似于函数的全局变量

  我们在下例中使用了一个静态属性Counter::$count. 它属于Counter类,而不属于任何Counter的实例.你不能用this来引用它,但可以用self或其它有效的命名表达. 在例子中,getCount方法返回self::$count,而不是Counter::$count.

  静态方法则实现类需要封装的功能,与特定的对象无关. 静态方法非常类似于全局函数. 静态方法可以完全访问类的属性,也可以由对象的实例来访问,不论访问的限定语是否是什么.

  在6.3例中,getCount是一个普通的方法,用->来调用. PHP建立一个this变量,尽管方法没有使用到.但是,getCount不属于任何对象.在有些情况下,我们甚至希望在不存在有效的对象时调用它,那么就应该使用静态方法. PHP将不在静态方法内部建立this变量,即使你从一个对象中调用它们.

  例子6.7由6.3改变getCount为静态方法而来. Static要害字不能阻止一个实例用->运算符来调用getCount,但PHP将不在方法内部建立this变量.假如你使用this->来调用,将会出错.

  //6.3例指第四节--构造函数和析构函数中的例子(参看前文),通过两个例子的比较,你可以很好把握
  //static方法与普通方法之间的区别.

  你可以写一个方法通过判定this是否建立来显示是否它被静态地或者非静态地调用. 当然,假如你用了static 要害字,不管它怎样被调用,这个方法总是静态的.

  你的类也可以定义常量属性,不需要使用public static,只需要用const要害字即可. 常量属性总是静态的.它们是类的属性,而不是实例化该类的对象的属性.

Listing 6.7 Static members



<?php
class Counter
{
private static $count = 0;
const VERSION = 2.0;

function __construct()
{
self::$count ;
}

function __destruct()
{
self::$count--;
}

static function getCount()
{
return self::$count;
}
};


//创建一个实例,则__construct()将执行
$c = new Counter();

//输出 1
print(Counter::getCount() . "<br>n");

//输出类的版本属性
print("Version used: " . Counter::VERSION . "<br>n");
?>

<?php
require_once('config.php');
function counter()

 session_start();
 $sql="select counter from counter";
 $result=@mysql_query($sql);
 if(!empty($result))
 {
  $row=mysql_fetch_array($result);
  $counter=++$row[counter];
  if(!$_SESSION['counter'])
  {
   $query="update counter set counter=$counter";
   $result=@mysql_query($query);
   if($result)
   {
    $_SESSION['counter']=true;
   }
  }
  $counter_len=strlen($counter);
  for($i=0;$i<$counter_len;$i++)
  {
   $number=substr($counter,$i,1);
   if(isset($number))
   {
    echo "<img" width=100% src='image/".$number.".gif'>";
   }
  }
 }
}
?>

PHP4.0中共有超过30个新的数组相关函数。其中很多通用函数答应你检查给定数组中是否存在特定对象、对数组元素计数、增加或删除元素,或对元素排序。

假如你有很大的一个数组,而所要完成的仅是找出一个存在的给定值,你可以使用in_array()以返回true 或 false。如下代码将输出“Not found in this array”

标签:[!--infotagslink--]

您可能感兴趣的文章: