PHP的语言特性-面向对象和C++/java/python的相似之处
来源:互联网 发布:快递员抢单软件 编辑:程序博客网 时间:2024/04/29 21:44
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++中常见的::操作符
<?phpclass Math { const pi = 3.14159;}echo " Math::pi = ".Math::pi."\n";?>
<?phpclass A {public static function who() {echo __CLASS__;}public static function test() {static::who(); // Here comes Late Static Bindings}}class B extends A {public static function who() {echo __CLASS__;}}A::test();B::test();?>
当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年来的发展也很快,可能也是另外一个好选择。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是一个对象,必须加$符号,
$this关键字是用来访问当前对象中的对象属性和对象方法的系统变量!
有三层意思:
1.它是一个变量。2.只能在对象中使用。3.可以访问属性和方法!
箭头符号->:
―>一般用在数据类型为类的后面,数据类型包括变量、数组、类,它可以很方便的调用类的方法和属性!
<?phpclass a{ function test() { echo "this is a test!"; }}$b = new a; //对象实例化$b -> test(); //调用对象中的方法 test()?>
->:这个是调用类中的方法
=>:这个是数组的键值对中间的标志
?: :这个是三目运算符,a?b:c 表示的是 if(a){b}else{c}
-------------------------------------------------------
PHP 数组中=> , 左边表示索引,右边表示键值;
<?php #这个一维数组你定义的没有错 $myarray = array("a","b","c"); print_r($myarray); #表示你定义了一个二维数组 $MyArray2 = array( "地支" => array("子", "丑", "寅", "卯"), "生肖" => array("鼠", "牛", "虎", "兔"), "数字" => array(1, 2, 3, 4));?>
1。在#以后的一行都被注释
########################
#### 以#号注释 #####
########################
2。单行注释
//反斜杠
3。可以多行注释
/*以C语言注释方式
*/
- PHP的语言特性-面向对象和C++/java/python的相似之处
- java语言的面向对象特性-31
- java之面向对象的三个特性
- 面向对象语言的特性
- 面向对象语言的特性
- C语言和C++之面向对象的引入(oop)
- 浅谈Java面向对象和C语言的实现
- C 语言部分实现面向对象的继承特性
- 4、Objective-C语言的面向对象特性
- python和php的面向对象
- C、C++、C#、Java、php、python语言的内在特性及区别
- PHP面向对象的三大特性之封装性
- PHP面向对象的三大特性之封装性
- Java的面向对象特性
- Java的面向对象特性
- Java的面向对象特性
- java面向对象的特性
- JAVA的面向对象特性
- 玩转色彩魅力 现代风格美屋设计
- 运行地址与执行地址
- vim快捷键整理
- Android使用FFmpeg实现定时录像
- 黑马程序员-银行挂号系统(张孝祥老师)
- PHP的语言特性-面向对象和C++/java/python的相似之处
- EAS F7多选
- 记录工作中遇到的难点
- 【转载】J2SE知识点归纳笔记(七)---Java IO Part 2:获取键盘输入与IO流体系图
- 程序员语摘
- 设计模式:开闭原则
- xCode编译有错误 却没有提示错误出处
- 导航栏图标背景颜色随点击发生变化
- ubuntu安装mysql配置utf8