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++中常见的::操作符
<?php
class Math {
const pi = 3.14159;
}
echo " Math::pi = ".Math::pi."\n";
?>
<?php
class 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 程序员们正在不遗余力地寻找延迟绑定的方式。有些方法是成功的。诸如 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.可以访问属性和方法!
箭头符号->:
―>一般用在数据类型为类的后面,数据类型包括变量、数组、类,它可以很方便的调用类的方法和属性!
<?php
class 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语言注释方式
*/