php中的类有什么用?和自定义函数有什么区别?能举例最好~!
可以继承是什么意思??
请çPHPæå18ç« ï¼éé¢çå
å®¹ä½ çäºå°±æç½ã
第 18 ç« ç±»ä¸å¯¹è±¡ï¼PHP 4ï¼
ç®å½
ç±»
继æ¿
æé å½æ°
èå´è§£ææä½ç¬¦ï¼::ï¼
parent
åºåå对象 ï¼ ä¼è¯ä¸ç对象
éæ¯å½æ° __sleep å __wakeup
æé å½æ°ä¸çå¼ç¨
对象çæ¯è¾
ç±»
ç±»æ¯åéä¸ä½ç¨äºè¿äºåéçå½æ°çéåã使ç¨ä¸é¢çè¯æ³å®ä¹ä¸ä¸ªç±»ï¼
<?php
class Cart {
var $items; // è´ç©è½¦ä¸çç©å
// å° $num 个 $artnr ç©åå å ¥è´ç©è½¦
function add_item($artnr, $num) {
$this->items[$artnr] += $num;
}
// å° $num 个 $artnr ç©åä»è´ç©è½¦ä¸ååº
function remove_item($artnr, $num) {
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return true;
} elseif ($this->items[$artnr] == $num) {
unset($this->items[$artnr]);
return true;
} else {
return false;
}
}
}
?>
ä¸é¢çä¾åå®ä¹äºä¸ä¸ª Cart ç±»ï¼è¿ä¸ªç±»ç±è´ç©è½¦ä¸çååææçæ°ç»å两个ç¨äºä»è´ç©è½¦ä¸æ·»å åå é¤ååçå½æ°ç»æã
è¦å
ä¸è½å°ä¸ä¸ªç±»çå®ä¹åå²å°å¤ä¸ªæ件ä¸ãä¹ä¸è½å°ä¸ä¸ªç±»çå®ä¹åå²å°å¤ä¸ª PHP åä¸ï¼é¤é该åå²æ¯å¨ä¸ä¸ªæ¹æ³å£°æå é¨ã以ä¸ç¨æ³å°ä¸èµ·ä½ç¨ï¼
<?php
class test {
?>
<?php
function test() {
print 'OK';
}
}
?>
ä½æ¯ä»¥ä¸ç¨æ³æ¯å¯ä»¥çï¼
<?php
class test {
function test() {
?>
<?php
print 'OK';
}
}
?>
以ä¸è¦åä» ç¨äº PHP 4ã
å°å¿
å称 stdClass å·²ç»è¢« Zend 使ç¨å¹¶ä¿çãä¸è½å¨ PHP 代ç ä¸å®ä¹å为 stdClass çç±»ã
å°å¿
å½æ°å __sleep å __wakeup å¨ PHP ç±»ä¸æ¯éæ¯å½æ°ãé¤éæ³è¦ä¸ä¹èç³»çéæ¯åè½ï¼å¦åå¨ä»»ä½ç±»ä¸é½ä¸è½ä»¥æ¤å½åå½æ°ã
å°å¿
PHP å°ææ以 __ å¼å¤´çå½æ°åä¿ç为éæ¯å½æ°ãé¤éæ³è¦ä½¿ç¨ä¸äºè§äºææ¡£ä¸çéæ¯åè½ï¼å¦å建议ä¸è¦å¨ PHP ä¸å°å½æ°å以 __ å¼å¤´ã
å¨ PHP 4 ä¸ï¼var åéçå¼åªè½åå§å为常éãç¨é常éå¼åå§ååéï¼éè¦ä¸ä¸ªåå§åå½æ°ï¼è¯¥å½æ°å¨å¯¹è±¡è¢«å建æ¶èªå¨è¢«è°ç¨ãè¿æ ·ä¸ä¸ªå½æ°è¢«ç§°ä¹ä¸ºæé å½æ°ï¼è§ä¸é¢ï¼ã
<?php
/* PHP 4 ä¸ä¸è½è¿æ ·ç¨ */
class Cart {
var $todays_date = date("Y-m-d");
var $name = $firstname;
var $owner = 'Fred ' . 'Jones';
/* ä¸è¿å å«æ常éçæ°ç»å¯ä»¥ */
var $items = array("VCR", "TV");
}
/* åºè¯¥è¿æ ·è¿è¡ */
class Cart {
var $todays_date;
var $name;
var $owner;
var $items = array("VCR", "TV");
function Cart() {
$this->todays_date = date("Y-m-d");
$this->name = $GLOBALS['firstname'];
/* etc. . . */
}
}
?>
ç±»ä¹æ¯ä¸ç§ç±»åï¼å°±æ¯è¯´ï¼å®ä»¬æ¯å®é åéçèå¾ãå¿ é¡»ç¨ new è¿ç®ç¬¦æ¥å建ç¸åºç±»åçåéã
<?php
$cart = new Cart;
$cart->add_item("10", 1);
$another_cart = new Cart;
$another_cart->add_item("0815", 3);
?>
ä¸è¿°ä»£ç å建äºä¸¤ä¸ª Cart ç±»ç对象 $cart å $another_cartï¼å¯¹è±¡ $cart çæ¹æ³ add_item() 被è°ç¨æ¶ï¼æ·»å äº 1 件 10 å·ååã对äºå¯¹è±¡ $another_cartï¼3 件 0815 å·åå被添å å°è´ç©è½¦ä¸ã
$cart å $another_cart é½ææ¹æ³ add_item()ï¼remove_item() åä¸ä¸ª items åéãå®ä»¬é½æ¯ææ¾çå½æ°ååéãå¯ä»¥æå®ä»¬å½ä½æ件系ç»ä¸çæäºç±»ä¼¼ç®å½çä¸è¥¿æ¥èèãå¨æ件系ç»ä¸ï¼å¯ä»¥æ¥æ两个ä¸åç README.TXT æ件ï¼åªè¦ä¸å¨ç¸åçç®å½ä¸ãæ£å¦ä»ä¸ºäºæ ¹ç®å½è®¿é®æ¯ä¸ªæ件éè¦è¾å ¥è¯¥æ件çå®æ´çè·¯å¾åä¸æ ·ï¼å¿ é¡»æå®éè¦è°ç¨çå½æ°çå®æ´å称ï¼å¨ PHP æ¯è¯ä¸ï¼æ ¹ç®å½å°æ¯å ¨å±åå空é´ï¼è·¯å¾å符å·å°æ¯ ->ãå èï¼å称 $cart->items å $another_cart->items å½åäºä¸¤ä¸ªä¸åçåéã注æåéå为 $cart->itemsï¼ä¸æ¯ $cart->$itemsï¼é£æ¯å ä¸ºå¨ PHP ä¸ä¸ä¸ªåéååªæä¸ä¸ªåç¬çç¾å 符å·ã
<?php
// æ£ç¡®ï¼åªæä¸ä¸ª $
$cart->items = array("10" => 1);
// ä¸æ£ç¡®ï¼å 为 $cart->$items åæäº $cart->""
$cart->$items = array("10" => 1);
// æ£ç¡®ï¼ä½å¯è½ä¸æ¯æ³è¦çç»æï¼
// $cart->$myvar åæäº $cart->items
$myvar = 'items';
$cart->$myvar = array("10" => 1);
?>
å¨å®ä¹ç±»çæ¶åï¼æ æ³å¾ç¥å°ä½¿ä»ä¹ååç对象æ¥è®¿é®ï¼å¨ç¼å Cart ç±»æ¶ï¼å¹¶ä¸ç¥éä¹å对象çå称å°ä¼å½å为 $cart æè $another_cartãå èä½ ä¸è½å¨ç±»ä¸ä½¿ç¨ $cart->itemsãç¶è为äºç±»å®ä¹çå é¨è®¿é®èªèº«çå½æ°ååéï¼å¯ä»¥ä½¿ç¨ä¼ªåé $this æ¥è¾¾å°è¿ä¸ªç®çã$this åéå¯ä»¥ç解为âæèªå·±çâæè âå½å对象âãå è '$this->items[$artnr] += $num' å¯ä»¥ç解为âæèªå·±çç©åæ°ç»ç $artnr 计æ°å¨å $numâæè âå¨å½å对象çç©åæ°ç»ç $artnr 计æ°å¨å $numâã
注æ: 伪åé $this é常æªå®ä¹ï¼å¦æå ¶æå¨çæ¹æ³æ¯è¢«éæè°ç¨çè¯ãä½è¿ä¸æ¯ä¸ªä¸¥æ ¼è§å®ï¼å¦æä¸ä¸ªæ¹æ³è¢«ä»å¦ä¸ä¸ªå¯¹è±¡å éæè°ç¨çè¯ï¼å $this ä¼è¢«å®ä¹ãæ¤æ¶ $this çå¼æ¯é£ä¸ªååºè°ç¨ç对象ãç¨ä¸ä¾æ¼ç¤ºï¼
<?php
class A
{
function foo()
{
if (isset($this)) {
echo '$this is defined (';
echo get_class($this);
echo ")\n";
} else {
echo "\$this is not defined.\n";
}
}
}
class B
{
function bar()
{
A::foo();
}
}
$a = new A();
$a->foo();
A::foo();
$b = new B();
$b->bar();
B::bar();
?>
ä¸ä¾å°è¾åºï¼
$this is defined (a)
$this is not defined.
$this is defined (b)
$this is not defined.
注æ: æä¸äºä¸éçå½æ°ç¨æ¥å¤çç±»å对象ãåºè¯¥å ³æ³¨ä¸ä¸ç±»ï¼å¯¹è±¡å½æ°ã
第 18 ç« ç±»ä¸å¯¹è±¡ï¼PHP 4ï¼
ç®å½
ç±»
继æ¿
æé å½æ°
èå´è§£ææä½ç¬¦ï¼::ï¼
parent
åºåå对象 ï¼ ä¼è¯ä¸ç对象
éæ¯å½æ° __sleep å __wakeup
æé å½æ°ä¸çå¼ç¨
对象çæ¯è¾
ç±»
ç±»æ¯åéä¸ä½ç¨äºè¿äºåéçå½æ°çéåã使ç¨ä¸é¢çè¯æ³å®ä¹ä¸ä¸ªç±»ï¼
<?php
class Cart {
var $items; // è´ç©è½¦ä¸çç©å
// å° $num 个 $artnr ç©åå å ¥è´ç©è½¦
function add_item($artnr, $num) {
$this->items[$artnr] += $num;
}
// å° $num 个 $artnr ç©åä»è´ç©è½¦ä¸ååº
function remove_item($artnr, $num) {
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return true;
} elseif ($this->items[$artnr] == $num) {
unset($this->items[$artnr]);
return true;
} else {
return false;
}
}
}
?>
ä¸é¢çä¾åå®ä¹äºä¸ä¸ª Cart ç±»ï¼è¿ä¸ªç±»ç±è´ç©è½¦ä¸çååææçæ°ç»å两个ç¨äºä»è´ç©è½¦ä¸æ·»å åå é¤ååçå½æ°ç»æã
è¦å
ä¸è½å°ä¸ä¸ªç±»çå®ä¹åå²å°å¤ä¸ªæ件ä¸ãä¹ä¸è½å°ä¸ä¸ªç±»çå®ä¹åå²å°å¤ä¸ª PHP åä¸ï¼é¤é该åå²æ¯å¨ä¸ä¸ªæ¹æ³å£°æå é¨ã以ä¸ç¨æ³å°ä¸èµ·ä½ç¨ï¼
<?php
class test {
?>
<?php
function test() {
print 'OK';
}
}
?>
ä½æ¯ä»¥ä¸ç¨æ³æ¯å¯ä»¥çï¼
<?php
class test {
function test() {
?>
<?php
print 'OK';
}
}
?>
以ä¸è¦åä» ç¨äº PHP 4ã
å°å¿
å称 stdClass å·²ç»è¢« Zend 使ç¨å¹¶ä¿çãä¸è½å¨ PHP 代ç ä¸å®ä¹å为 stdClass çç±»ã
å°å¿
å½æ°å __sleep å __wakeup å¨ PHP ç±»ä¸æ¯éæ¯å½æ°ãé¤éæ³è¦ä¸ä¹èç³»çéæ¯åè½ï¼å¦åå¨ä»»ä½ç±»ä¸é½ä¸è½ä»¥æ¤å½åå½æ°ã
å°å¿
PHP å°ææ以 __ å¼å¤´çå½æ°åä¿ç为éæ¯å½æ°ãé¤éæ³è¦ä½¿ç¨ä¸äºè§äºææ¡£ä¸çéæ¯åè½ï¼å¦å建议ä¸è¦å¨ PHP ä¸å°å½æ°å以 __ å¼å¤´ã
å¨ PHP 4 ä¸ï¼var åéçå¼åªè½åå§å为常éãç¨é常éå¼åå§ååéï¼éè¦ä¸ä¸ªåå§åå½æ°ï¼è¯¥å½æ°å¨å¯¹è±¡è¢«å建æ¶èªå¨è¢«è°ç¨ãè¿æ ·ä¸ä¸ªå½æ°è¢«ç§°ä¹ä¸ºæé å½æ°ï¼è§ä¸é¢ï¼ã
<?php
/* PHP 4 ä¸ä¸è½è¿æ ·ç¨ */
class Cart {
var $todays_date = date("Y-m-d");
var $name = $firstname;
var $owner = 'Fred ' . 'Jones';
/* ä¸è¿å å«æ常éçæ°ç»å¯ä»¥ */
var $items = array("VCR", "TV");
}
/* åºè¯¥è¿æ ·è¿è¡ */
class Cart {
var $todays_date;
var $name;
var $owner;
var $items = array("VCR", "TV");
function Cart() {
$this->todays_date = date("Y-m-d");
$this->name = $GLOBALS['firstname'];
/* etc. . . */
}
}
?>
ç±»ä¹æ¯ä¸ç§ç±»åï¼å°±æ¯è¯´ï¼å®ä»¬æ¯å®é åéçèå¾ãå¿ é¡»ç¨ new è¿ç®ç¬¦æ¥å建ç¸åºç±»åçåéã
<?php
$cart = new Cart;
$cart->add_item("10", 1);
$another_cart = new Cart;
$another_cart->add_item("0815", 3);
?>
ä¸è¿°ä»£ç å建äºä¸¤ä¸ª Cart ç±»ç对象 $cart å $another_cartï¼å¯¹è±¡ $cart çæ¹æ³ add_item() 被è°ç¨æ¶ï¼æ·»å äº 1 件 10 å·ååã对äºå¯¹è±¡ $another_cartï¼3 件 0815 å·åå被添å å°è´ç©è½¦ä¸ã
$cart å $another_cart é½ææ¹æ³ add_item()ï¼remove_item() åä¸ä¸ª items åéãå®ä»¬é½æ¯ææ¾çå½æ°ååéãå¯ä»¥æå®ä»¬å½ä½æ件系ç»ä¸çæäºç±»ä¼¼ç®å½çä¸è¥¿æ¥èèãå¨æ件系ç»ä¸ï¼å¯ä»¥æ¥æ两个ä¸åç README.TXT æ件ï¼åªè¦ä¸å¨ç¸åçç®å½ä¸ãæ£å¦ä»ä¸ºäºæ ¹ç®å½è®¿é®æ¯ä¸ªæ件éè¦è¾å ¥è¯¥æ件çå®æ´çè·¯å¾åä¸æ ·ï¼å¿ é¡»æå®éè¦è°ç¨çå½æ°çå®æ´å称ï¼å¨ PHP æ¯è¯ä¸ï¼æ ¹ç®å½å°æ¯å ¨å±åå空é´ï¼è·¯å¾å符å·å°æ¯ ->ãå èï¼å称 $cart->items å $another_cart->items å½åäºä¸¤ä¸ªä¸åçåéã注æåéå为 $cart->itemsï¼ä¸æ¯ $cart->$itemsï¼é£æ¯å ä¸ºå¨ PHP ä¸ä¸ä¸ªåéååªæä¸ä¸ªåç¬çç¾å 符å·ã
<?php
// æ£ç¡®ï¼åªæä¸ä¸ª $
$cart->items = array("10" => 1);
// ä¸æ£ç¡®ï¼å 为 $cart->$items åæäº $cart->""
$cart->$items = array("10" => 1);
// æ£ç¡®ï¼ä½å¯è½ä¸æ¯æ³è¦çç»æï¼
// $cart->$myvar åæäº $cart->items
$myvar = 'items';
$cart->$myvar = array("10" => 1);
?>
å¨å®ä¹ç±»çæ¶åï¼æ æ³å¾ç¥å°ä½¿ä»ä¹ååç对象æ¥è®¿é®ï¼å¨ç¼å Cart ç±»æ¶ï¼å¹¶ä¸ç¥éä¹å对象çå称å°ä¼å½å为 $cart æè $another_cartãå èä½ ä¸è½å¨ç±»ä¸ä½¿ç¨ $cart->itemsãç¶è为äºç±»å®ä¹çå é¨è®¿é®èªèº«çå½æ°ååéï¼å¯ä»¥ä½¿ç¨ä¼ªåé $this æ¥è¾¾å°è¿ä¸ªç®çã$this åéå¯ä»¥ç解为âæèªå·±çâæè âå½å对象âãå è '$this->items[$artnr] += $num' å¯ä»¥ç解为âæèªå·±çç©åæ°ç»ç $artnr 计æ°å¨å $numâæè âå¨å½å对象çç©åæ°ç»ç $artnr 计æ°å¨å $numâã
注æ: 伪åé $this é常æªå®ä¹ï¼å¦æå ¶æå¨çæ¹æ³æ¯è¢«éæè°ç¨çè¯ãä½è¿ä¸æ¯ä¸ªä¸¥æ ¼è§å®ï¼å¦æä¸ä¸ªæ¹æ³è¢«ä»å¦ä¸ä¸ªå¯¹è±¡å éæè°ç¨çè¯ï¼å $this ä¼è¢«å®ä¹ãæ¤æ¶ $this çå¼æ¯é£ä¸ªååºè°ç¨ç对象ãç¨ä¸ä¾æ¼ç¤ºï¼
<?php
class A
{
function foo()
{
if (isset($this)) {
echo '$this is defined (';
echo get_class($this);
echo ")\n";
} else {
echo "\$this is not defined.\n";
}
}
}
class B
{
function bar()
{
A::foo();
}
}
$a = new A();
$a->foo();
A::foo();
$b = new B();
$b->bar();
B::bar();
?>
ä¸ä¾å°è¾åºï¼
$this is defined (a)
$this is not defined.
$this is defined (b)
$this is not defined.
注æ: æä¸äºä¸éçå½æ°ç¨æ¥å¤çç±»å对象ãåºè¯¥å ³æ³¨ä¸ä¸ç±»ï¼å¯¹è±¡å½æ°ã
温馨提示:答案为网友推荐,仅供参考
第1个回答 2008-08-22
函数只是类的一部分
类可以继承等,有封闭性
类跟函数是两个完全不同的概念
类可以继承等,有封闭性
类跟函数是两个完全不同的概念