博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP的语言特性-面向对象和C++/java/python的相似之处
阅读量:2357 次
发布时间:2019-05-10

本文共 2976 字,大约阅读时间需要 9 分钟。

1.script

弱类型

  因为是弱类型,在函数的参数类型比较灵活,写一个函数可以顶得上C++/java好几个函数(在C++/java里面有个名词overload).

   当然在PHP的类里面,也可以使用类型提示来限定参数的类型。

在函数方法的参数方面,也使用了by reference,by value的概念,避免使用指针这种容易出问题的东西。

(by reference,by value看起来好面熟,在vb里面用过。)

可变变量,可变函数

函数式动态语言(基本上现在的script语言都是这样,js,python,等等)

引入了协程yield, generator(类似于python,golang)

2.面向对象特性-糅合C++/java/python

大多数面向对象的特性都和C++/java/python类似,下面说说其中的几个方面a-j

a.成员访问运算符(C++)

使用C++的箭头运算符

  ->

而不是java的点运算符。

b.class,extends这些都是C++/java

c.不支持C++那样的多重继承,而是采用java那样的interface(类似于java)

implements interface

d.使用默认构造函数和析构函数,使用默认的属性访问器函数(类似于python)

__construct()

__construct($param)

__destruct()

__set($name,$value)

__get($name)

这些和python类似

类的实例化仍然是new, 这个没有必要创新。

e.per-class const, per-class method使用C++中常见的::操作符

static关键字用于per-class method
类似于java
php真的是便宜行事的语言,哈哈哈。
f.namespace类似于C++
g.PHP5.3引入late static binding(延迟静态绑定)
感觉和C++的动态绑定很类似,但是好像更加方便一点点简洁一点点。
C++ V-table (Virtual function table)

当C++程式呼叫非虚函数, 采用与C程式呼叫函数所用方式一样的静态绑定来呼叫函数。 但是C++程式 若是透过指向类别的指针来呼叫虚函数时, 编译程式则采用所谓的晚期绑定(late binding)或静态绑定 (static binding)技术来呼叫函数。

而C++虚函数用虚函数表(virtual function table), 或称V-表来实作动态绑定, 所谓的V-表是一 个函数指针的阵列, 这是编译程序替每个使用虚函数的类所建制的。

用 Java 语言延迟绑定

Java 社区对静态类型检查的迷恋程度令人惊讶,Java 程序员们正在不遗余力地寻找延迟绑定的方式。有些方法是成功的。诸如 Spring 等框架的存在主要是为了延迟绑定,它有助于减缓客户机和服务之间的耦合。面向方面的编程通过提供能够扩展类的功能(甚至可以超出其当前的功能)的服务来实现延迟绑定。像 Hibernate 这样的框架也可以延迟绑定,通过反射、代理和其他工具在运行时将持久性功能添加到纯粹、普通的 Java 对象(POJO)中。现在有很多关于如何用 POJO 编程的流行书籍可供开发人员参考,这些书籍大多会使用愈加复杂的技术(比反射还要先进),而这些技术主要是为了打开类并延迟绑定,从而有效地回避了静态类型。

上面2006年发表的文章很老了,但是他的说法依然很有价值。

java8已经加入了很多好玩的特性,比如lamda表达式。

groovy/scala是jvm上面的动态语言,这5年来的发展也很快,可能也是另外一个好选择。
h.clone关键字用于clone对象
还有__clone()方法
让我想起了java里面的clone()方法,以及shallow clone/deep clone的概念。
默认是deep clone,如果类成员属性是复杂类型,就需要考虑deep clone,也就是通过override cloen()函数。
i.抽象类
PHP的抽象类比较奇葩,只能包含抽象方法。
java里面也叫做抽象方法,不过java的抽象类可以有非抽象方法。相同的一点点是抽象类本身不能有实例对象,这就是抽象类的抽象含义。
C++里面抽象方法叫做纯虚函数。
j.overloading vs. overriding
两者在中文里面都叫做重载,但是在英文里面可以区分,他们是两回事情。
orverloading在C++/java中很普遍,因为是强类型。
overloading在PHP这种弱类型语言里面很少用到。
3.视觉上面有时候感觉比较不习惯的几个地方
a.$符号
$符号加上字符串,这就是一个变量名或对象名
,例如下面的代码:

class MyClass{  private $_val;  public function foo(){    return $this->_val;  }  public function foo1(){    return $this->_val;  }  ......}$my = new MyClass;echo $my->foo();
说明:MyClass是个类名,不用加$符号,$_val是个私有变量,一般是以$加下划线加字符串组成的,foo和foo1是两个成员函数,不用加$符号,$my是一个对象,必须加$符号,
b. php中的this和箭头符号
在类中经常遇到this关键词,如何去理解它了!
         $this关键字是用来访问当前对象中的对象属性和对象方法的系统变量!
         有三层意思:
         1.它是一个变量。2.只能在对象中使用。3.可以访问属性和方法!
箭头符号->:
          ―>一般用在数据类型为类的后面,数据类型包括变量、数组、类,它可以很方便的调用类的方法和属性!
test(); //调用对象中的方法 test()?>
-------------------------------------------------------
->:这个是调用类中的方法
=>:这个是数组的键值对中间的标志
?: :这个是三目运算符,a?b:c 表示的是 if(a){b}else{c}
-------------------------------------------------------
PHP 数组中=> , 左边表示索引,右边表示键值;
参考:
array("子", "丑", "寅", "卯"), "生肖" => array("鼠", "牛", "虎", "兔"), "数字" => array(1, 2, 3, 4));?>
c. php的注释
  //在PHP中如何注释
  1。在#以后的一行都被注释
  ########################
  ####   以#号注释   #####
  ########################
  2。单行注释
  //反斜杠
  3。可以多行注释
  /*以C语言注释方式
  */
d. 双冒号
和C++里面的双冒号类似,
不用实例化直接调用类的方法/常量

转载地址:http://yojtb.baihongyu.com/

你可能感兴趣的文章
【转贴】使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast
查看>>
【转帖】最爱你的男孩总把你挂在心上
查看>>
今天去献血啦,在这里做一回义务献血宣传员吧 ^_^
查看>>
推荐一款免费的桌面搜索软件 VistaGlance 1.2 ,按文件名称建立索引!
查看>>
生活与爱的感悟——“英雄天地”博客摘录
查看>>
Adobe Acrobat 部分文件无法删除的解决办法
查看>>
忘记系统登录密码的简便方法
查看>>
获取论文全文的13种方法
查看>>
把爱传递——写在第10次献血和成为一名义工之际
查看>>
应用随机过程概率模型导论(9th 英文版) Sheldon M.Ross 共享
查看>>
两个不错的 Matlab 时频分析工具箱
查看>>
【转】研究生必读→如何获得全文文献
查看>>
考博心得集锦——成功因素、相关准备工作
查看>>
考博联系导师的办法[转]
查看>>
考博考硕联系导师的注意事项
查看>>
2008北航博士考试总结【转】
查看>>
揭秘卡耐基•梅陇大学机器蛇
查看>>
【转】免费学术资源网址
查看>>
【转】免费进入学术数据库
查看>>
【转】matlab 使用的一点儿体会(for beginner)
查看>>