位置: 编程技术 - 正文

Perl5 OOP学习笔记第1/2页(perl pi)

编辑:rootadmin
在学习了Perl的基本语法之后,学习Perl的OOP,略有心得。不知道Perl各个版本之间OOP是否有区别,但是我是学习的Perl5,所以在标题上将版本号也写出来了。因为了解到PHP4和PHP5的OOP部分就有不小的差别,所以有此担心。   学习Perl的OOP,最关键的两件事情就是package和bless。只要把这两个东西搞清楚也就学会大一半了。 Perl的package   感觉Perl的package和Java还真有点相似。Java的package是以CLASSPATH中的目录为根,按目录定义和搜索分级包名。Perl也类似,是以@INC数组中的目录为根,按目录搜索分级包名。不过有一点不同,Perl的package定义貌似不需要与目录结构对应。具体是什么样的规则我没有去研究,因为按目录结构定义package是个好习惯。   相较于Java,Perl的package还有一点很有意思。Java的每层package对应一个目录,而最后是一个class文件对应到类名。Perl却简化了,package直接就把目录和文件名都引用了进去。比如   Java中,name.jamesfancy.MyClass,对应的是/name/jamesfancy/MyClass.class,源代码中则分成两句来写   Perl中,name::jamesfancy::MyClass,应对的是/name/jamesfancy/MyClass.pm,源代码中只有一句package就说明了   至于package中的内容,也就是变量和子程序,至于区别,稍后再说。 bless函数   bless是用来把一个类绑定到引用类型变量的函数。很奇怪Perl为什么要用这个单词,不过没关系,我们可以把它想像得形象一点:就像游戏里牧师通过祝福技能为某人加上BUFF一样,bless把一个类绑定到某个引用类型的变量,从此这个变量就受到了祝福,拥有了这个类中的变量和子程序。   bless的用法通常是:bless($引用变量, 类名);   引用变量貌似可以是任何引用类型的变量,我尝试过Scalar,Array和Hash的引用,都能成功。在bless之外,这个引用变量就可以被称之为对象了,当然它仍然是个引用,是对象的引用。   有一点还需要注意,虽然这个对象拥有了类的变量和子程序,但我们应该把它拥有的类的变量和子程序都看成是静态的,换句话说,就是类的成员。在这一点上,子程序的处理会比较特殊一点,但至少类的变量,也就是包变量,是不属于对象的。因此,所有对象的数据都保存在对象引用的原始数据中。既然大家都习惯对象数据以键值对的方式保存,所以通常情况下,bless的引用变量,都是Hash的引用了。   很抽象么?举个例子。如果对OOP的成员函数还不够了解,那就只看下面示例中每个类的test函数中第一句以后的内容不好。 从上面的示例中可以看到,分别将3种类型的引用转变为对象。之所以要把类写成3个而非1个,主要是为了在Test里输出不同类型的数据。类和对象的成员函数

  成员函数就是在package中定义的子程序。成员函数是没有静态和非静态之分的,但我宁愿大家都把它看作是静态函数,因为虽然它即可以当作类成员函数来调用,也可以当用对象成员函数来调用,但在当作对象成员函数来调用的时候,Perl偷偷的传入了对象引用。这也解释了为什么通常成员函数里的第一句话往往是当然,这里的$this只是一个局部变量,而不是关键字,你也可以用别的名称来代替它。比如很多人就喜欢用$self,或者$me等。 假如,对于一个成员函数,分别用类和对象来对它进行调用,会有什么不一样呢?再看一个示例: 从结果可以看出来,不管哪种方法调用,第一个参数都是Perl偷偷传递进去的。如果是类调用,则第一个参数是该类。如果是对象调用,第一个参数是该对象。因此,只需要将ref($this)的结果和类名进行比较就清楚是哪种调用了。所以,一个容错性较好的成员函数,一开始要判断传入的第一个参数,比如 这里还有一个疑问:既然package中定义的子程序都是成员函数,那不是类的package和是类的package有啥区别?它们在结构上没有一点区别,唯一的区别在处理中。在调用子程序的时候,Perl不会硬塞一个类或者对象在参数列表的最前面,但调用成员函数的时候会,所以区别是根据你的调用方式来区分的。   调用对象成员还好说,$obj->foo()就好,但是调用类成员的时候,怎么知道是调用的类成员还是包中的子程序呢?那就要看是通过“->”还是“::”来调用的了。下面的例子可以帮助理解: 很明显,通过“::”调用的子程序没有被Perl塞入一个引用类的参数。 构造函数   Perl的OOP没有指定专门的构造函数,所以你可以把任何一个子程序当作构造函数,当然,重要的是其中的内容。既然脚本通常不是写给自己一个人看的,所以还是按照大家的习惯,把构造函数取名为new吧。按照多数OOP语言的习惯,new函数通常返回一个对象或其引用、指针。所以在Perl中,这个new函数要返回一个对象引用,理所当然地,把bless动作包含在new函数中是个好习惯。那么一个简单的new函数看起来就像这样: 这个new函数中产生了一个Hash引用,bless它,并返回它。如果你疑惑为什么这里没有看到return语句,那么建议你去看看关于子程序中返回值的资料,顺便查一下bless函数的说明。来看看完整的程序了解一下是怎么使用new函数的。

推荐整理分享Perl5 OOP学习笔记第1/2页(perl pi),希望有所帮助,仅作参考,欢迎阅读内容。

Perl5 OOP学习笔记第1/2页(perl pi)

文章相关热门搜索词:perl视频教程全57讲,perl7,perl7,perl快速入门,perl7,perl 教程,perl基础教程,perl基础教程,内容如对您有帮助,希望把文章链接给更多的朋友!

PERL脚本 学习笔记 1.chomp无参数时,使用默认参数,将对$_操作。2.数组@array..可用$array[number]引用。$#array..表示数组中索引数。3.$!包含出错信息;4.默认打开文件句柄的方

探索Perl的世界(更新到集)-Perl视频教程 Perl的相比起来还是少.看视频,在入门时还是相当方便的,就象电影来看就好了。我基本Superor老师每出一集我都看了。希望大家也认真看看。记的,学

perl 基本语法介绍 一.数据类型(Datatype):Perl的数据类型大致分为四种:Scalar(变量)、ScalarArray(数组)、HashArray(散列)、References(指针),看起来虽少但用起来却绰

标签: perl pi

本文链接地址:https://www.jiuchutong.com/biancheng/372447.html 转载请保留说明!

上一篇:python 获取命令行参数 函数(python获取命令行执行命令的输出)

下一篇:PERL脚本 学习笔记(perl脚本教程视频)

  • 应交税费借方余额0.01怎么调整
  • 所得税汇算清缴后发现有误怎么办
  • 营业账簿印花税申报期限
  • 销售固定资产清单怎么做
  • 贷款利息是否能降低
  • 实收资本记账凭证摘要怎么写
  • 个人所得税差额20%政策
  • 房产经纪公司成本费用
  • 分公司怎么做
  • 农产品为什么价格低
  • 企业公益性捐赠支出税前扣除标准
  • 货物已到发票未到怎么做账
  • 报表中应交税金和应交税费区别
  • 调增教育经费如何做账
  • 现金日记账的登记依据有
  • 母公司收购少数股东股权,之前的利润母公司不享有
  • 加工承揽合同印花税谁交
  • 银行利息的现金流量项目是什么
  • 工资薪金所得适用的税率是
  • 税控盘续费会计分录怎么做
  • 企业的资金怎么使用
  • 收到员工偿还的借款8000元,所生成的凭证会计分录
  • 会计差错更正的准则依据
  • 代收污水处理费要交税吗
  • 对子公司投资应采取的核算方法
  • 补贴收入营业外收入比例过高
  • 高薪补贴需要交什么税
  • 哪些支出可以在计算企业应纳税所得额时加计扣除
  • 融资租赁直租会查征信吗
  • 企业所得税抵缴欠税
  • 每个月的股利怎么计提?
  • windows10.0
  • 一般劳务报酬和其他劳务报酬的区别
  • 个税手续费返还属于政府补助吗
  • 发放股票股利的会计分录怎么写
  • hyper-v虚拟机中重置虚拟机是什么意思
  • 在php中,字符串有哪些表示形式
  • 超率累进税率和超倍累进税率
  • 所有者权益会计科目借贷方向
  • php odbc
  • 加速折旧法计算公式 CFA
  • 金鱼草的养殖方法和注意事项有哪些
  • 冲减应收账款的分录
  • 所得税税前扣除的费用有哪些
  • 什么叫股权溢价之谜?
  • phpcrawl
  • 处置资产的账务处理
  • 长期借款主要包括哪些
  • 车间购买办公用品
  • 企业补助怎么做会计分录
  • 织梦怎么改网站主页
  • 金税盘分盘可以全额抵扣吗
  • 销售费用期末余额
  • 进项税加计扣除10%怎么算
  • 机票开的个人的票是什么
  • 利息支出可以抵扣进项吗
  • 融资租赁公司收费标准
  • 印花税应税凭证是还是否
  • 安装mysql5.7虚拟机教程
  • mysql 5.7.13 winx64安装配置教程
  • 在linux操作系统中,/etc/rc.d/init.d
  • xp系统远程桌面设置
  • ubuntu16.04英文版安装教程
  • linux系统输入法锁定了怎么解开
  • macbookpro客人用户
  • linux启动u盘制作
  • xp系统如何优化
  • win8无法关机一直转圈
  • win8适用的pr
  • win7系统桌面图标不见了怎么办
  • 微信小程序实现微信支付
  • javascript要怎么学
  • cocos2dx3.3在Win7(64位)上Android开发环境搭建(提要)
  • 管道的实现
  • Android5.1 SystemUI 启动流程
  • Unity3D NGUI UIInput制作输入框屏蔽特殊字符(只允许输入正整数)
  • javascript简明教程
  • adb把文件拷贝到手机
  • jquery获取当前日期yyyymmdd
  • 粮食收储企业税收优惠
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设