php、javascript、python、ruby语言对比

 N

php

javascript

python

ruby

 1

模块定义或引入: use, namespace, import, as, include,include_once, require,require_once,

类定义:    class, abstract, clone, default, extends, final, implements, interface, new, private, protected, public, trait(friend),

方法定义:  callable, declare,enddeclare, function

方法返回:return

检查类型:  const,instanceof,isset(), empty(),eval(),

条件语句: if, else,elseif,endif,endswitch,goto, switch, case,

循环语句: break, continue, do, for,endfor,foreach,endforeach, while,endwhile

逻辑判断: and, or,xor

逻辑值和空值: true, false, null

异常处理: try, catch, finally, throw,

对象引用: this, self, parent

编译器相关: __FILE__, __LINE__, __DIR__, __FUNCTION__, __CLASS__, __METHOD__, __NAMESPACE__, __TRAIT__, __halt_compiler()

别名: as

变量定义:  var

全局定义:  global

静态定义:  static

打印语句:  echo, print

Generator: yield

List操作: list(), unset()

其他:exit(),insteadof, die(),

http://php.net/manual/zh/reserved.keywords.php

http://www.w3school.com.cn/php/index.asp

模块定义或引入: 

类定义:  new, delete, with

方法定义: void, function

方法返回:return

检查类型:  instanceof,typeof

条件语句: if, else, switch, case, default,

循环语句: break, do, while, continue, for, in

逻辑判断: &&, !, ||

逻辑值和空值: true, false, null

异常处理: try, catch, finally, throw

对象引用: this

编译器相关: debugger*

变量定义:  var

List操作: Array()

 

不能用作标识符的保留字(ECMA-262):

abstract,enum,int,short,

boolean,export,interface,static,

byte,extends,long,super,

char,final,native,synchronized,

class,float,package,throws,

const,goto,private,transient,

debugger,implements,protected,volatile,

double,import,public,

http://www.itxueyuan.org/view/6627.html

http://www.w3school.com.cn/js/index.asp

模块定义或引入: import, as, from

类定义:    class

方法定义:  def

方法返回:return

检查类型:  is

条件语句: if, else,elif

循环语句: break, continue, for, in, while

逻辑判断: and, not, or

逻辑值和空值: True, False, None

异常处理: assert, try, finally, raise, with, except

对象引用: self

嵌入模块:excec

别名: as

全局定义:  global

打印语句:  print

空语句: pass

Generator: yield

(产生一个迭代结果)

List操作: del

表达式: lambda

http://www.2cto.com/kf/201312/268555.html

http://www.w3cschool.cn/python/

http://www.runoob.com/python/python-intro.html

模块定义: module

类定义:    class

方法定义:def,undef

方法返回:return

检查类型:defined?

条件语句: if, then, else,elsif, case, when, unless

循环语句: for, in, while, until, next, break, do, redo, retry, yield

逻辑判断: not, and, or

逻辑值和空值: true, false, nil

异常处理: rescue, ensure, raise

对象引用: super, self

块的起始: begin/end

嵌入模块: BEGIN ,END

编译器相关: __FILE__, __LINE__

别名: alias

http://www.runoob.com/ruby/ruby-syntax.html

http://www.w3school.com.cn/tags/tag_ruby.asp

http://www.yiibai.com/ruby/2013/0819172.html

 2

注释符号

# //

/*多行注释*/

 

//

/*多行注释*/

 

#

''' 多行注释'''

或者

””多行注释””

 

#

=begin多行注释=end

 

 3

echo "Hello world!<br>", “Here”;

print "Hello world!<br>";

console.log("asdf");

document.write("

asdf

");

 

print "Hello world!<br>";

puts "Hello World!";

 4

常量定义

define("GREETING", "Welcome Here!", true);

defined()         检查某常量是否存在。

constant()        返回一个常量的值。

无直接用法,可以采用闭包形式

无直接用法,可以采用常量类代替。

attr:直接定义属性,默认的只读,如果后面跟true,表示属性可写,false为只读

class Test 

  attr :foo, true

  attr :read

end

 5

PHP include require语句

通过 include require语句,可以将 PHP文件的内容插入另一个 PHP文件(在服务器执行它之前)。

include require语句是相同的,除了错误处理方面:

1require会生成致命错误(E_COMPILE_ERROR)并停止脚本

2include只生成警告(E_WARNING),并且脚本会继续

无直接方法,可以采用下面形式

document.write(””);

new_element=document.createElement(”script”);
new_element.setAttribute(”type”,”text/javascript”);
new_element.setAttribute(”src”,”import.js”);
document.body.appendChild(new_element);

import os

os.system("python filename")

execfile('xx.py')

require

require File.dirname(__FILE__)

+'/file2'   

 6

PHP 中的许多预定义变量都是超全局的,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。

这些超全局变量是:

$GLOBALS$_SERVER$_REQUEST$_POST$_GET$_FILES$_ENV$_COOKIE$_SESSION

window.name=测试

global x, y, z

1、一般小写字母、下划线开头:变量(Variable)。

2$开头:全局变量(Global variable)。

3@开头:实例变量(Instance variable)。

4@@开头:类变量(Class variable)类变量被共享在整个继承链中

大写字母开头:常数(Constant)。

 

 7

$x=5;

$x = "Hello world!";

 

var x=2;

var1 = 1

name = "John" # 字符串

 

 8

索引数组 -带有数字索引的数组

$cars=array("Volvo","BMW","SAAB");

关联数组 -带有指定键的数组

$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");

或者

$age['Peter']="35";

$age['Ben']="37";

$age['Joe']="43";

多维数组 -包含一个或多个数组的数组

$cars = array

  (

  array("Volvo",22,18),

  array("BMW",15,13),

  array("Saab",5,2),

  array("Land Rover",17,15)

  );

 

varmyArray=new Array()

myArray [0]="01"

myArray [1]="11"

没有多维数组

元组和列表、字典

元组与列表类似,不同之处在于元组的元素不能修改。

 

tup1 = ('physics', 'chemistry', 1997, 2000);

tup2 = (1, 2, 3, 4, 5 );

tup3 = "a", "b", "c", "d";

list1 = ['physics', 'chemistry', 1997, 2000];

list2 = [1, 2, 3, 4, 5 ];

print "tup1[0]: ", tup1[0]

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};

 

 

names=Array.new(20)

digits=Array(0..9)

nums=Array.new(10) { |e| e = e * 2 }

def   list 

  [['保密',''],['',1],['',0]] 

end 

 9

 

var patt1=newRegExp("e");

 

 

 

10

c++,更像java,由于是动态类型语言,没有java的重载功能,与java一样可以自动释放内存,基本可以视为面向对象语言。

php的对象可以动态地后添加属性增减数据,不需要模板泛型编程。

相同点,都具有final,抽象类,接口,变量可见度等语法。

interface AnotherTestInterface {

}

 

class Base {

    static public function test() {

       var_dump(get_called_class());

    }

}

 

class Derive extends Base {

}

 

Base::test();

Derive::test();

 

var_dump(get_class(new Base()));

var_dump(get_class(new Derive()));

 

严格地说,不是面向对象语言,只是面向对象概念中浓缩的一个子集。

 面向对象的核心是继承、封装、多态。

Javascript这三者都不太满足。

person=new Object();

person.firstname="Bill";

person.lastname="Gates";

person.age=12;

person.methodName();

 

继承方式可以参考:

http://raychase.iteye.com/blog/1337415

不像c++c#也不像java,基本可以视为面向对象语言。

对于面向对象语言还是觉得有{}包围或者类似的起始结束标记看起来比较舒服。

python中继承中的一些特点:

1:在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。

2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。

3Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。

http://www.w3cschool.cn/python/python-object.html

http://blog.csdn.net/chongtianfeiyu/article/details/21894005

http://blog.csdn.net/youzhouliu/article/details/51894539

javac#ruby更像c++,但跟c++差别也很大,基本可以视为面向对象语言。

c主要不同的地方(解释执行器的负担加重了)

1object是强类型

2、变量和函数名称可以动态改变

3:内存自动释放

4: 没有char字符

c++的不同:

1: 只能通过访问函数修改变量

2: 没有多重继承

3: 可以动态增加和减少类的方法和变量

4: 没有模板机制和类型转换机制(同第3)

5: 只有两种容器ArrayHash

class Father 

  def   says 

    puts "I am father." 

  end 

  def   MyInfo 

    puts "father info." 

  end 

end 

 

class Child < Father 

  def   says 

    puts "I am child." 

  end 

    def   MyInfo 

    puts " child info." 

  end 

end 

参考

http://www.runoob.com/ruby/ruby-object-oriented.html

http://www.runoob.com/ruby/ruby-class-case-study.html

 11

function familyName($fname,$year) {

}

function myFunction(var1,
var2)
{这里是要执行的代码}
					

def  printme(str ):

   "打印传入的字符串到标准显示设备上"

   print str

   return

调用:

printme("再次调用同一函数");

 

def  method_name [( [arg [= default]]...[, *arg [, &expr ]])]

   expr..

end

def   test(a1="Ruby", a2="Perl")

   puts "编程语言为 #{a1}"

   puts "编程语言为 #{a2}"

end

test "C", "C++"

test

def   test

   i = 100

   j = 200

   k = 300

return i, j, k

end

var = test

puts var

 12

if 语句 -如果指定条件为真,则执行代码

if...else 语句 -如果条件为 true,则执行代码;如果条件为 false,则执行另一端代码

if...elseif....else语句 -选择若干段代码块之一来执行

switch 语句 -语句多个代码块之一来执行

 

if 语句 -只有当指定条件为 true时,使用该语句来执行代码

if...else 语句 -当条件为 true时执行代码,当条件为 false时执行其他代码

if...else if....else语句 -使用该语句来选择多个代码块之一来执行

switch 语句 -使用该语句来选择多个代码块之一来执行

 

if 判断条件:

    执行语句……

else

    执行语句……

if 判断条件1:

    执行语句1……

elif判断条件2:

    执行语句2……

else:

执行语句3……

if num == 3:          

    print '3'       

elifnum == 2:

    print '2'

else:

    print 'other'   

不支持 switch语句

 

x=1

if x > 2

   puts "x 大于 2"

elsif x <= 2 and x!=0

   puts "x 1"

else

   puts "无法得知 x的值"

end

 

x=1

unless x>2

   puts "x 小于 2"

 else

  puts "x 大于 2"

end

 

case expr0

when expr1, expr2

   stmt1

when expr3, expr4

   stmt2

else

   stmt3

end

 13

for -循环代码块指定次数

for ($x=0; $x<=10; $x++)

{}

foreach -遍历数组中的每个元素并循环代码块

$colors = array("red","green","blue","yellow");

foreach ($colors as $value) {

  echo "$value <br>";

}

while -只要指定条件为真,则循环代码块

while($x<=5) {}

do...while -先执行一次代码块,然后只要指定条件为真则重复循环

do{} while ($x<=5);

 

break语句用于跳出循环。

continue用于跳过循环中的一个迭代。

for -循环代码块一定的次数

for (var i=0;i<cars.length;i++)

{}

for/in -循环遍历对象的属性

var person={fname:"John",lname:"Doe",age:25};

for (x in person)

  {

  txt=txt + person[x];

  }

while -当指定的条件为 true时循环指定的代码块

while (i<5)

  {

  i++;

  }

do/while -同样当指定的条件为 true时循环指定的代码块

do

  {

i++;

  }

while (i<5);

 

break语句用于跳出循环。

continue用于跳过循环中的一个迭代。

pass是空语句,是为了保持程序结构的完整性。

for循环

for/in

for letter in 'Python':  

   print '当前字母 :', letter

while循环

i = 2

while(i < 100):

   j = 2

   while(j <= (i/j)):

      if not(i%j): break

      j = j + 1

   if (j > i/j) : print i, "是素数"

   i = i + 1

 

while conditional [do或者 :]

   code

end

#until表示当条件为假时执行

until conditional [do]

   code

end

begin

  code

end while conditional

begin

   code

end until conditional

for variable [, variable ...] in expression [do]

   code

end

for i in 0..5

   if i < 2 then

     next

   end

   puts "局部变量的值为 #{i}"

end

 14

Date() 函数把时间戳格式化为更易读的日期和时间。

date("h:i:sa");

$d=mktime(9, 12, 31, 6, 10, 2015);

$d=strtotime("10:38pm April 15 2015");

 

Date()

varmyDate=new Date()

myDate.setFullYear(2008,7,9)

 

import time

localtime =time.asctime(time.localtime(time.time()) )

import calendar

cal =calendar.month(2016, 1)

 

 

time1 = Time.new

 15

1.        Try -使用异常的函数应该位于 "try"代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。

2.        Throw -这里规定如何触发异常。每一个 "throw"必须对应至少一个 "catch"

3.        Catch - "catch"代码块会捕获异常,并创建一个包含异常信息的对象

try

  {

catch(Exception $e

)

  {

  }

 

trigger_error("Value must be 1 orbelow",E_USER_WARNING);

 }

 "die()" 语句

set_error_handler("customError");

创建回调函

function customError($errno, $errstr){}

 

try语句测试代码块的错误。

catch语句处理错误。

throw语句创建自定义错误。

try

  {

 if(isNaN(x))throw "
NAN exception";

  }

catch(err)

  {

  }

try:

<语句>       #运行别的代码

except <名字>

<语句>       #如果在try部份引发了'name'异常

except <名字><数据>:

<语句>       #如果引发了'name'异常,获得附加的数据

else:

<语句>       #如果没有异常发生

try:

   fh = open("testfile", "w")

   fh.write("This is my test file for exception handling!!")

except IOError:

   print "Error: can\'t find file or read data"

else:

   print "Written content in the file successfully"

或者

try:

<语句>

finally:

<语句>   #退出try时总会执行

Raise

 

def  temp_convert(var):

   try:

      return int(var)

   except ValueError, Argument:

      print "The argument does not contain numbers\n", Argument

temp_convert("xyz");

 

raise相当于throw

rescue相当于catch

ensure相当于finally

 

begin #开始

raise.. #抛出异常

rescue [ExceptionType =StandardException] #捕获指定类型的异常缺省值是StandardException

$! #表示异常信息

$@ #表示异常出现的代码位置

else #其余异常

..

ensure #不管有没有异常,进入该代码块

end #结束

 16

 

window.

document.getElementById("p1").innerHTML="New text!";

document.getElementById("image").src="landscape.jpg";

document.getElementById("p2").style.color="blue";

onclick="changetext(this)">请点击该文本

 

 

 

 17

多线程

 

 

 

 

你可能感兴趣的:(php、javascript、python、ruby语言对比)