织梦投票类构造函数__construct($aid)源码分析教程

admin2023-01-18990

所在文件:include/dedevote.class.php

既然是投票类的构造函数,一定是关于处理投票数据的,而投票数据又存放在数据库表#@__vote里面,所以,这个构造函数也是一定会处理这个数据库表的,现在我们先看一下这个这个数据库表的结构:

360截图20200121212301743.jpg

注意字段votenote,这是这个构造函数里面,处理这个字段值最重要的内容之一。虽然,这个构造函数比较简单,但是,这个构造函数代表了那种类型的东西——麻雀虽小五脏俱全,如果研究构造函数建立把这一个彻底研究透了,其它就简单了,这个代码虽然不多,但是,再复杂的构造函数像文档类构造函数,基本上根这个构造函数差不多,至少是主要的结构一样。

我们可以把这个构造函数分成二大部分:根据实例化时的参数查询数据库表#@__vote;另一部分,实例化模板引擎处理表里面的vootenote字段值,实际上这二部分是分不开的,上一部分是为下一部分服务的。

为了方便学习,我们把这个投票类实例化后,打印出来,我在后台建立一个投票,这具是织梦默认的,如下图所示:

360截图20200121212301743.jpg

实例化这个投票类,参数$aid=1,我们得到如下结果:

DedeVote Object
(
    [VoteInfos] => Array
        (
            [aid] => 1
            [votename] => 你是从哪儿得知本站的?
            [starttime] => 1266336000
            [endtime] => 1584547200
            [totalcount] => 0
            [ismore] => 0
            [isallow] => 1
            [view] => 1
            [spec] => 0
            [isenable] => 0
            [votenote] => 朋友介绍rn门户网站的搜索引擎rnGoogle或百度搜索rn别的网站上的链接rn直接打开www.dedebase.com网址
        )

    [VoteNotes] => Array
        (
            [1] => Array
                (
                    [count] => 1
                    [name] => 朋友介绍
                )

            [2] => Array
                (
                    [count] => 0
                    [name] => 门户网站的搜索引擎
                )

            [3] => Array
                (
                    [count] => 2
                    [name] => Google或百度搜索
                )

            [4] => Array
                (
                    [count] => 2
                    [name] => 别的网站上的链接
                )

            [5] => Array
                (
                    [count] => 1
                    [name] => 直接打开www.dedebase.com网址
                )

        )

    [VoteCount] => 5
    [VoteID] => 1
    [dsql] => DedeSql Object
        (
            [linkID] => Resource id #29
            [dbHost] => localhost
            [dbUser] => root
            [dbPwd] =>
            [dbName] => dedecms
            [dbPrefix] => dede_
            [result] => Array
                (
                    [me] => 0
                    [one] => Resource id #31
                )

            [queryString] => SELECT * FROM `dede_vote` WHERE aid='1' LIMIT 0,1;
            [parameters] =>
            [isClose] =>
            [safeCheck] => 1
            [recordLog] =>
            [isInit] => 1
            [pconnect] =>
        )

)

如果对照这个对象,再去分析代码就非常容易了。因为,我是直接实倒化的的投票类,所以,得到的这个是一个对象,这个对象里面包含四部分,分别是VoteInfos数组、VoteNotes数组、dsql对象和[VoteCount] => 5 ,[VoteID] => 1 这二个对象单元。

voteinfos数组对应的代码是:

$this->VoteInfos

VoteNotes数组对应代码是:

$this->VoteNotes

dsql对象对应的代码是:

$this->dsql = $GLOBALS['dsql'];

[VoteCount] => 5对应代码:

$this->VoteCount = 0;

为什么这里是五,这个要看下面的foreach就知道了,这个是不断增加的。

[VoteID] => 1 对应代码是:

$this->VoteID = $aid;

这个其实就是实例时,传的参数值。

这样一分析,是不是就对这个构造函数理解有很大帮助,其实,有时候我们多做些分析,你会发现,这些构造函数都大同小异。

网友评论