问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

php中的类有什么用?和自定义函数有什么区别?

发布网友 发布时间:2022-04-06 01:56

我来回答

2个回答

热心网友 时间:2022-04-06 03:25

请看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.

     

注意: 有一些不错的函数用来处理类和对象。应该关注一下类/对象函数。 

热心网友 时间:2022-04-06 04:43

函数只是类的一部分

类可以继承等,有封闭性

类跟函数是两个完全不同的概念
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在公交车上实施扒窃,会受到怎样的处罚? 交通违法行为识别 公交车扒窃会如何处罚? 郑州鱼缸清洗找哪家公司做得比较好? 郑州有没有专业维修鱼缸,清洗鱼缸的? ...的鱼缸,放在办公室养些鱼水草之类的。郑州哪里有卖这样的鱼缸。_百... 我们公司想要定做个观赏鱼缸,不知道郑州哪家公司最专业? 谁知道郑州生态鱼缸定做哪家做的效果最好? 联想电脑启用无线功能的功能键? 笔记本电脑怎么连接网笔记本电脑怎样连接无线网 PHP中的数据对象是什么 php中方法的属性可以是对象吗 php 中类,面象对象的程序方法学习疑问! PHP 中的 对象 类 属性 实例化 到底是怎么理解的啊· php里面,什么叫对象内部?什么是对象外部? php里函数、方法、类各是指什么,都混了…… 织梦如何实现收藏文章的功能啊 共享和收藏的那个php文件咋写? 怎样用PHP编写有帐户登录功能的“在线收藏夹”程序? 做一个简单的可以实现积分兑换的网站,怎么实现数据库的设计的连接?点赞、收藏功能如何实现 php环境下。怎么改变字体颜色?怎么让浏览者加入收藏 php点击收藏时存储数据到mysql是怎么做的? PHP 收藏夹程序 用ThinkPHP+JQuery实现无刷新点赞、踩、收藏功能 ASP.NET中如何实现收藏本店功能 优酷播放视频页面视频下面的收藏功能是如何实现的呢?如果我用php+ajax如何实现? php+mysql+dreamweaver实现帖子收藏、分享等功能 用thinkphp写商品收藏,要怎么写,之前写过tp+ajax点赞的,收藏在控制器那不会了 thinkphp 收藏功能 php写商品收藏功能怎么写啊?js里面是怎么写的? PHP中object对象指什么,将它赋给个变量有什么用呢? php中的面向对象。。类里边的成员属性到底是干嘛的?。。类里边的方法最终只是为了给属性赋值吗??? php文本导入 mysql 怎么修改下面的代码使得最后一个字段不出现&#92;r&#92;n(即去除换行符号)。 为什么我的php没有php5apache2.dll php5apache2.dll 找不到怎么办? php5.6配置加载php5apache2_4.dll 我配置Apache和PHP的时候出现了问题,没有添加PHP配置的时候,Apache测试是可行的 Apache2.4为什么启动报错Cannot load php5apache2 php5.3.6没有php5apache2_2.dll 在apache加载php模块的时候怎么加载!求高手帮忙 PHP里面没有php5apache2_4.dll 怎么配置 Apache24 让apache 支持php php我配置apache和php,报错php5apache2_4.dll这个无法读取识别 php5apache2_4.dll读取不到,Apache2.4服务无法开启 刚安装了PHP5.4.0,想把它和apache连接,但是找不到php5apache2.dll ,求高人指点 这个怎么解决的呀 apache2.2.17和php5.3.4怎么配置 php中没有php5apache2_2.dll这个文件 下载的php-5.3.5解压后的目录中没有php5apache2.dll,怎么配置httpd.conf 文件? php5.3 php5.4解压之后为什么没有php5apache2 php和apache配置时,下载php5.3.8这个版本,里面怎么没有php5apache2_2.dll这个文件 php和apache配置 LoadModule php5_module D:/php/php5apache2.dll 配置apach php 报错无法加载php5apache2.dll httpd.conf中加上LoadModule php5_module &quot;D:&#47;web&#47;php5.6&#47;php5apache2_4.dll&quot;启动失败