您的位置:首页 > Web前端 > JavaScript

php、javascript、python、ruby语言对比

2017-01-11 17:25 375 查看
 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("<p>asdf</p>");
 

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语句是相同的,除了错误处理方面:
1、require会生成致命错误(E_COMPILE_ERROR)并停止脚本
2、include只生成警告(E_WARNING),并且脚本会继续
无直接方法,可以采用下面形式
document.write(”<script language=javascript src=’/js/import.js’></script>”);

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参数变量。
3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。 http://www.w3cschool.cn/python/python-object.html http://blog.csdn.net/chongtianfeiyu/article/details/21894005 http://blog.csdn.net/youzhouliu/article/details/51894539
与java、c#,ruby更像c++,但跟c++差别也很大,基本可以视为面向对象语言。
与c主要不同的地方(解释执行器的负担加重了):
1:object是强类型
2、变量和函数名称可以动态改变
3:内存自动释放
4: 没有char字符
与c++的不同:
1: 只能通过访问函数修改变量
2: 没有多重继承
3: 可以动态增加和减少类的方法和变量
4: 没有模板机制和类型转换机制(同第3条)
5: 只有两种容器Array和Hash
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 -先执行一次代码块,然后只要指定条件为真则重复循环

<span lang="EN-US" style="" font-size:2pt;font-family:"="">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";

<script>

functionchangetext(id)

{

id.innerHTML="谢谢!";

}

</script>

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

<script>
document.getElementById("myBtn").onclick=function(){ changetext(getId);

 };

</script>

<script>

varpara=document.createElement("p");

var node=document.createTextNode("这是新段落。");

para.appendChild(node);

 

var element=document.getElementById("div1");

element.appendChild(para);

var child=document.getElementById("p1");

child.parentNode.removeChild(child);

或者para.removeChild(child);

</script>

 
 
 
 17
多线程
 
 
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: