首页 > 编程技术 > php

关于那个SMTP类及一个例子

发布时间:2016-11-25 16:33

因为显示的原因,发上来的帖里里有一些空格被删除了,造成大家使用上的一些错误。
分析如下:
1,因为不经意的修改,大家拿到这样的很优秀的类后,总希望改成自己看起来舒心一些。不过我需要提醒一些,在这个程序里,有时增加或者删除几个空格都会造成程序出错。
2,现在我将发上来的程序的一些问题说说明一下。
Content-Type:后面的1-2行前面要有数个空格。请加上。HTML中每一行前面的空格都不会显示,所以,帖子里没有了。
这是前面一个朋友帖出的内容,我修改后如下:
This is a multi-part message in MIME format.
--=====_1__=====
Content-Type: multipart/alternative;
  boundary="=====_2__====="
--=====_2__=====
Content-Type: text/plain;
  charset="GB2312"
  Content-Transfer-Encoding: base64
x+vKudPD1qez1khUTUwguPHKvbXE08q8/sjtvP7AtLLpv7S4w9PKvP4=
--=====_2__=====
Content-Type: text/html;
  charset="GB2312"
  Content-Transfer-Encoding: base64
PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PjxoMT7A/dfTPC9oMT48L2JvZHk+PC9odG1sPg==
--=====_2__=====--
--=====_1__=====--
这里有一个例子:
其实很简单的。
$sender= new smtp();
$fromname="sony";
$frommail="sonymusic@china.com";
$toname="pbabi";
$tomail="panbei@163.net";
$subject="一个例子";
$text_body="请使用支持HTML 格式的邮件软件来查看该邮件";
$html_body.="<html><head></head><body><h1>例子</h1></body></html>";
$send_ok=$sender->send($fromname,$toname,$frommail,$tomail,$subject,$text_body,$html_body);

第二节--PHP5 的对象模型
PHP5有一个单重继承的,限制访问的,可以重载的对象模型. 本章稍后会详细讨论的”继承”,包含类间的父-子关系. 另外,PHP支持对属性和方法的限制性访问. 你可以声明成员为private,不允许外部类访问. 最后,PHP允许一个子类从它的父类中重载成员.
//haohappy注:PHP4中没有private,只有public.private对于更好地实现封装很有好处.
PHP5的对象模型把对象看成与任何其它数据类型不同,通过引用来传递. PHP不要求你通过引用(reference)显性传递和返回对象. 在本章的最后将会详细阐述基于句柄的对象模型. 它是PHP5中最重要的新特性.
有了更直接的对象模型,基于句柄的体系有附加的优势: 效率提高, 占用内存少,并且具有更大的灵活性.
在PHP的前几个版本中,脚本默认复制对象.现在PHP5只移动句柄,需要更少的时间. 脚本执行效率的提升是由于避免了不必要的复制. 在对象体系带来复杂性的同时,也带来了执行效率上的收益. 同时,减少复制意味着占用更少的内存,可以留出更多内存给其它操作,这也使效率提高.
//haohappy注:基于句柄,就是说两个对象可以指向同一块内存,既减少了复制动作,又减少对内存的占用.
Zand引擎2具有更大的灵活性. 一个令人高兴的发展是允许析构--在对象销毁之前执行一个类方法. 这对于利用内存也很有好处,让PHP清楚地知道什么时候没有对象的引用,把空出的内存分配到其它用途.
 
第三节--定义一个类
当你声明一个类,你需要列出对象应有的所有变量和所有函数—被称为属性和方法. 3.1.1中显示了一个类的构成. 注意在大括号({})内你只能声明变量或者函数. 3.1.2中显示了如何在一个类中定义三个属性和两个方法.
3.1.1
class Name extends Another Class
{
     Access Variable Declaration
     Access Function Declaration
}
 
3.1.2
<?php
     //定义一个跟踪用户的类
     class User
     {
         //属性
         public $name;
         private $password, $lastLogin;
         //方法
         public function __construct($name, $password)
         {
        $this->name = $name;
        $this->password = $password;
        $this->lastLogin = time();
        $this->accesses++;
         }
         // 获取最后访问的时间
         function getLastLogin()
         {
        return(date("M d Y", $this->lastLogin));
         }
     }
     //创建一个对象的实例
     $user = new User("Leon", "sdf123");
     //获取最后访问的时间
     print($user->getLastLogin() ."<br> ");
<html>
<head>
    <title>Untitled</title>
</head>
<body>
<?php
$in="2344";
if(ereg("^(-{0,1}|+{0,1})[0-9]+(.{0,1}[0-9]+)$",$in))
    echo "Ok!";
else
    echo "Sorry,Please input again!";
?>
<br>很简单的嘛!
</body>
</html>

第十一节--重载
PHP4中已经有了重载的语法来建立对于外部对象模型的映射,就像Java和COM那样. PHP5带来了强大的面向对象重载,允许程序员建立自定义的行为来访问属性和调用方法.
重载可以通过__get, __set, and __call几个特殊方法来进行. 当Zend引擎试图访问一个成员并没有找到时,PHP将会调用这些方法.
在例6.14中,__get和__set代替所有对属性变量数组的访问. 如果必要,你可以实现任何类型你想要的过滤. 例如,脚本可以禁止设置属性值, 在开始时用一定的前缀或包含一定类型的值.
__call方法说明了你如何调用未经定义的方法. 你调用未定义方法时,方法名和方法接收的参数将会传给__call方法, PHP传递__call的值返回给未定义的方法.
Listing 6.14 User-level overloading
<?php
     class Overloader
     {
         private $properties = array();
         function __get($property_name)
         {
        if(isset($this->properties[$property_name]))
        {
            return($this->properties[$property_name]);
        }
        else
        {
            return(NULL);
        }
         }
         function __set($property_name, $value)
         {
        $this->properties[$property_name] = $value;
         }
         function __call($function_name, $args)
         {
标签:[!--infotagslink--]

您可能感兴趣的文章: