面试题

  1. 什么是MVC

MVCModel(模型), View(视图)和Controller(控制器)组成,PHP MVC可以更高效地管理好3个不同层的PHP代码。

Model:数据信息存取层。

Viewview层负责将应用的数据以特定的方式展现在界面上。

Controller:通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

2. GD库是做什么用的?

GD库提供了一系列用来处理图片的功能,使用GD库可以处理图片,或者生成图片。

在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。

3. sessioncookie的区别?

session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放

cookie:用来存储连续訪問一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WINTemp目录中的。

两者都可通过时间来设置时间长短。

4. PHP打印出前一天的时间格式是2010-7-3 12:28:21?

echo date(‘Y-m-d H:i:s, strtotime(‘-1 days’)); 

5. 对于大流量的网站,您采用什么样的方法来解决访问量问题?

答:确认服务器硬件是否足够支持当前的流量,数据库读写分离,优化数据表,

程序功能规则,禁止外部的盗链,控制大文件的下载,使用不同主机分流主要流量。

6. PHP魔术方法都有哪些?

__construct(),类的构造函数

__destruct(),类的析构函数

__call(),在对象中调用一个不可访问方法时调用

__callStatic(),用静态方式中调用一个不可访问方法时调用

__get(),获得一个类的成员变量时调用

__set(),设置一个类的成员变量时调用

__isset(),当对不可访问属性调用isset()empty()时调用

__unset(),当对不可访问属性调用unset()时被调用。

__sleep(),执行serialize()时,先会调用这个函数

__wakeup(),执行unserialize()时,先会调用这个函数

__toString(),类被当成字符串时的回应方法

__invoke(),调用函数的方式调用一个对象时的回应方法

__set_state(),调用var_export()导出类时,此静态方法会被调用。

__clone(),当对象复制完成时调用

__autoload(),尝试加载未定义的类

__debugInfo(),打印所需调试信息

7. 你怎么理解命名空间?

PHP 命名空间(namespace)是在PHP 5.3中加入的.

PHP 命名空间可以解决以下两类问题:

a) 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。

b) 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

8. 你了解RESTFUL吗?

REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful

Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。

在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI (Universal Resource Identifier) 得到一个唯一的地址。所有资源都共享统一的接口,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,比如 GETPUTPOST DELETEHypermedia 是应用程序状态的引擎,资源表示通过超链接互联。

9. 做过APP接口没?怎么做的?

用框架写接口,普通POSTGET接口,有时候用RESTFUL接口。写控制器从模型调用数据,返回XML或者JSON数据就行了。

APP接口主要解决两个问题,一个SESSION问题,一个是TOKEN问题。客户端第一次请求,服务端生成SESSION_ID,返回给客户端。之的请求中,客户端把SESSION_ID传给服务端,服务端用SESSION_ID函数可以确保多次请求用的同一个SESSIONTOKEN需要加密和服务端验证。

10. PHP如何实现缓存?

1、数据缓存——普遍的一种缓存技术,主要是缓存经常用到的数据,一般是数据库中的,用来减少访问数据库的次数,来节省时间。

非常直观的字面意思,就是把数据先存放好,减少对数据库的访问。第一次访问时,把要用到的数据保存到一个文件里,然后用户再次访问页面时,就先检测要查询的数据是否在缓存文件里,若存在,则直接取出,不需再次访问数据库。

一般这些数据以数组的形式保存。

2、页面缓存    页面缓存是将整个页面缓存,也就是服务器编译的结果

和数据缓存差不多,每次访问页面时,就检测相应的页面缓存是否存在,若不存在,则查询数据库得到相应的数据,同时生成缓存页面,这样,在下次访问就可以直接取出缓存页面,不必再次查询数据库。

3、内存缓存

不作过多分析,一般熟悉借助第三方软件进行优化,比如MemcachedRedis

以上方法能够解决频繁访问数据库的问题,但是缺乏时效性,在数据库改变后,他们默认的数据还是修改之前的。所以就要在规定时间内清除缓存,以更新数 据。比如在每次更新缓存后设定一个时间戳t1,当前的时间戳t2,规定缓存时间为T,那么,在t1t2相差在T之内时,就不更新缓存,否则,超过了T, 就重新查询数据库,清除之前的缓存,又得到一个新的时间戳,依次循环下去。

11. 用过smarty没有?用过什么模板引擎?

Smarty是很老的技术了。常用的框架如ThinkPHPYii都自带模板引擎。最常用的方法是3个:assign赋值,display显示页面,fetch获取页面内容而非显示。

12. 如何合并数组?

操作符+,在前一个数的基础上插入后一个数组,如果有相同的抛弃,而array_merge 是在前一个参数基础上插入后一个参数,如果有相同用的key 用后一个覆盖。

 

 

13. 常用的设计模式有哪些?

单例模式,简单工厂模式,策略模式,观察者模式,注册()模式,迭代模式

14. 怎么认识PHP的异常处理?

可以使用检测(try)、抛出(throw)和捕获(catch)异常。即使用try检测有没有抛出(throw)异常,若有异常抛出(throw),使用catch捕获异常。

一个 try 至少要有一个与之对应的 catch。定义多个 catch 可以捕获不同的对象。PHP 会按这些 catch 被定义的顺序执行,直到完成最后一个为止。而在这些 catch 内,又可以抛出新的异常。

15. 解释下PHP垃圾回收机制

php 5.3之前使用的垃圾回收机制是单纯的“引用计数”,也就是每个内存对象都分配一个计数器,当内存对象被变量引用时,计数器 1;当变量引用撤掉后,计数器-1;当计数器=0时,表明内存对象没有被使用,该内存对象则进行销毁,垃圾回收完成。

 

“引用计数”存在问题,就是当两个或多个对象互相引用形成环状后,内存对象的计数器则不会消减为0;这时候,这一组内存对象已经没用了,但是不能回收,从而导致内存泄露;

php5.3开始,使用了新的垃圾回收机制,在引用计数基础上,实现了一种复杂的算法,来检测内存对象中引用环的存在,以避免内存泄露。

16. 打开php.ini中的safe_mode,会影响哪些函数?至少说出6个。(新浪)

safe_modePHP安全模式,它提供一个基本安全的共享环境,在一个有多个用户账户存在的php开发的web服务器上。当安全模式打开的时候,一些函数将被完全的禁止,而另一些函数的功能将会受到限制,如:chdir,move_uploaded_file,chgrp,parse_ini_file,chown,rmdir,copy,rename,fopen,require,mkdir,unlink等。

注意,在php5.3以上版本,safe_mode被弃用,在php5.4以上版本,则将此特性完全去除了。

 

17. 抓取远程图片到本地,你会用什么函数?(51.com笔试题)

file_get_contents或者curl

 

18. 请写一段PHP代码,确保多个进程同时写入同一个文件成功

核心思路:加锁

 

<?php

    $fp = fopen("lock.txt","w+");

    if (flock($fp,LOCK_EX)) {

        //获得写锁,写数据

        fwrite($fp, "write something");

 

        // 解除锁定

        flock($fp, LOCK_UN);

    } else {

        echo "file is locking...";

    }

    fclose($fp);

?>

 

19. 写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。

<?php

    function my_scandir($dir){

        $files = array();

        if(is_dir($dir)){

            if ($handle = opendir($dir)) {

                while (($flie = readdir($handle))!== false) {

                    if ($flie!="." && $file!="..") {

                        if (is_dir($dir."/".$file)) {

                            $files[$file] = my_scandir($dir."/".$file);

                        } else {

                            $files[] = $dir."/".$file;

                        }

                    }

                }

                closedir($handle);

                return $files;

            }

        }

    }

?>

 

20. PHP如何实现页面跳转

方法一:php函数跳转,缺点,header头之前不能有输出,跳转后的程序继续执行,可用exit中断执行后面的程序。

header("Location:网址");//直接跳转

header("refresh:3;url=http://axgle.za.NET");//三秒后跳转

 

方法二:利用meta

echo"<meta http-equiv=refresh content='0;url=网址'>";

 

21. 写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉):

过滤JavaScript脚本参考:

 

<?php

    header("content-type:text/html;charset=utf-8");

 

    $script = "以下内容不显示:<script type='text/javascript'>alert('cc');</script>";

    $pattern = '/<script[^>]*?>.*?</script>/si';

 

    echo preg_replace($pattern, "脚本内容", $script);//以下内容不显示:脚本内容

?>

 

22. 请写一个函数验证电子邮件的格式是否正确(要求使用正则)

preg_match('/^[\w\-\.]+@[\w\-]+(\.\w+)+$/',$email);

 

23. 请写出并说明如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?(腾讯)

首先进入php安装目录

php -f d:/wamp/www/1.php 其中-f参数指定要执行的php文件

php -r phpinfo(); 其中-r表示直接执行php代码,无需写开始结束标记

 

24. PHP中,如何获得一个数组的键值?(酷讯)

使用key()可以获得数组中当前元素的键名,使用current()则可以返回当前元素的值。

使用array_keys()则可以得到数组中所有的键名。

使用foreach结构foreach($arr as key=>value)可以通过keyvalue分别获取键名和值。

 

25. 如果我的网站用的utf-8编码,为防止乱码出现,都需要注意哪些地方?

从以下几个方面考虑:

 

数据库中库和表都用utf8编码

php连接mysql,指定数据库编码为utf8 mysql_query(set names utf8);

php文件指定头部编码为utf-8header(content-type:text/html;charset=utf-8);

网站下所有文件的编码为utf8

html文件指定编码为utf-8<meta http-equiv="Content-Type"content="text/html;charset=utf-8"/>

 

 

26. url中用get传值的时候,若中文出现乱码,应该用哪个函数对中文进行编码?

urlencode

 

27. 写出五种以上你使用过的PHP的扩展的名称(提示:常用的PHP扩展)

mb_sringiconvcurlGDXMLsocketMySQLPDO

 

28. 请描述如下URL重写规则的用意。

<IfModulemod_rewrite.c>

RewriteEngineon

RewriteCond%{REQUEST_FILENAME}!-f

RewriteCond%{REQUEST_FILENAME}!-d

RewriteBase/

RewriteRule./index.php[L]

</IfModule>

如果REQUEST_FILENAME文件存在,就直接访问文件,不进行下面的rewrite规则,

如果REQUEST_FILENAME目录存在,就直接访问目录,不进行下面的rewrite规则,

RewriteRule./index.php[L]的意思是把所有的请求都给index.php处理。

 

29. Warning:Cannot modify header information-headers already sent by(output started at D:\src\init.php:7)in D:\src\init.php on line10通常什么情况下php会报该警告信息?

一般是在headerset_cookie以及session_start函数前面有输出(包括空格)的情况下,会报该警告信息

30. 什么是ORM

对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的--“虚拟对象数据库”。

31.什么是RBAC

基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收。角色与角色的关系可以建立起来以囊括更广泛的客观情况。

32. 如何防止SQL注入?

转义引号。

addslashes() 是强行加\

mysql_real_escape_string()  会判断字符集,但是对PHP版本有要求;

mysql_escape_string不考虑连接的当前字符集。

33. 如何避免跨站攻击

要完成一次CSRF攻击,受害者必须依次完成两个步骤:

1.登录受信任网站A,并在本地生成Cookie

2.在不登出A的情况下,访问危险网站B

 

服务端进行CSRF防御

  1. Cookie Hashing(所有表单都包含同一个伪随机值)。因为攻击者不能获得第三方的Cookie(理论上),所以表单中的数据也就构造失败了
  2. 验证码。每次的用户提交都需要用户在表单中填写一个图片上的随机字符串。
  3. One-Time Tokens(不同的表单包含一个不同的伪随机值)

34. 你都做过什么项目,的那几个模块?担任什么职责?

 

 

35. 如何认识PHP框架的路由机制?

主要是通过伪静态来实现单一入口,mvc框架都是这样。将所有请求通过apache伪静态解析转给某个指定文件,然后通过php$_SERVER[]这个全局变量来去的请求的路径字符串,对其进行解析再分配给指定的类去处理,基本就是这样。

最简单的方法是建立一个.htaccess文件。文件内容贴给你

<IfModule !mod_rewrite.c>

    ErrorDocument 500 'mod_rewrite must be enabled'

</IfModule>

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php

 

将这个文件放在根目录下即可。文件作用很明显:将所有的请求路径转给index.php,然后在index.php里做请求字符串的判断即可打到路由解析功能。

36. PHP有几种运行方式?

1CGI

CGI即通用网关接口(common gatewag interface),它是一段程序,通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执 行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。

2FastCGI

fast-cgi cgi的升级版本,FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全称PHP FastCGI进程管理器进行管理。

3APACHE2HANDLER

PHP作为Apache模块,Apache服务器在系统启动后,预先生成多个进程副本驻留在内存中,一旦有请求出 现,就立即使用这些空余的子进程进行处理,这样就不存在生成子进程造成的延迟了。这些服务器副本在处理完一次HTTP请求之后并不立即退出,而是停留在计算机中等待下次请求。对于客户浏览器的请求反应更快,性能较高。

4CLI

cliphp的命令行运行模式,大家经常会使用它,但是可能并没有注意到(例如:我们在linux下经常使用 “php -m”查找PHP安装了那些扩展就是PHP命令行运行模式;

 

 

 

 

 

MySQL数据库问题:

 

 

  1. 如何设计或配置Mysql,才能达到高效使用的目的。

a) 数据库设计方面,设计结构良好的数据库,允许部分数据冗余。 选取最适用的字段属性,尽可能把字段设置为NOT NULL,这样在查询的时候,数据库不用去比较NULL值。

b) 系统架构设计方面,表散列,把海量数据散列到几个不同的表里面,集群,数据库查询和写入分开。 写高效sql语句,以提高效率。使用连接(join)来代替子查询使用联合(union)来代替手动创建的临时表所得皆必须,只从数据库取必须的数据。必 要的时候用不同的存储引擎,比如Innodb可以减少死锁,HEAP可以提高一个数量级的查询速度。

 

  1. 请说出mysql常用存储引擎?memory存储引擎的特点?

a) MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用:

b) MyISAMInnoDBMERGEMEMORY(HEAP)BDB(BerkeleyDB)EXAMPLEFEDERATEDARCHIVECSVBLACKHOLE

c) MySQL支持数个存储引擎作为对不同表的类型的处理器。MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎:

d) MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。MyISAM在所有MySQL配置里被支持,它是默认的存储引擎,除非你配置MySQL默认使用另外一个引擎。

e) MEMORY存储引擎提供“内存中”表。MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。就像MyISAM一样,MEMORYMERGE存储引擎处理非事务表,这两个引擎也都被默认包含在MySQL中。

f) 注释:MEMORY存储引擎正式地被确定为HEAP引擎。

g) InnoDBBDB存储引擎提供事务安全表。BDB被包含在为支持它的操作系统发布的MySQL-Max二进制分发版里。InnoDB也默认被包括在所 有MySQL 5.1二进制分发版里,你可以按照喜好通过配置MySQL来允许或禁止任一引擎。

h) EXAMPLE存储引擎是一个“存根”引擎,它不做什么。你可以用这个引擎创建表,但没有数据被存储于其中或从其中检索。这个引擎的目的是服务,在 MySQL源代码中的一个例子,它演示说明如何开始编写新存储引擎。同样,它的主要兴趣是对开发者。

i) NDB Cluster是被MySQL Cluster用来实现分割到多台计算机上的表的存储引擎。它在MySQL-Max 5.1二进制分发版里提供。这个存储引擎当前只被Linux, Solaris, Mac OS X 支持。在未来的MySQL分发版中,我们想要添加其它平台对这个引擎的支持,包括Windows

j) ARCHIVE存储引擎被用来无索引地,非常小地覆盖存储的大量数据。

k) CSV存储引擎把数据以逗号分隔的格式存储在文本文件中。

l) BLACKHOLE存储引擎接受但不存储数据,并且检索总是返回一个空集。

m) FEDERATED存储引擎把数据存在远程数据库中。在MySQL 5.1中,它只和MySQL一起工作,使用MySQL C Client API。在未来的分发版中,我们想要让它使用其它驱动器或客户端连接方法连接到另外的数据源。

n) 比较常用的是MyISAMInnoBD

  1. MySQL LEFT JOIN联查问题,不再举例。

 

  1. 如何MySQL性能优化?

a) 通过Show命令,慢查询日志,profiling分析查询确定瓶颈。

b) 使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。

c) 当只要一行数据时使用 LIMIT 1

d) 为搜索字段建索引

e) Join表的时候使用相当类型的例,并将其索引

f) 尽可能的使用 NOT NULL

g) 水平分表

h) 垂直分表

i) 选择正确的存储引擎

j) 避免长连接

 

 

 

 

 

 

 

 

 

算法问题

  1. 使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组

//冒泡排序(数组排序)

 

function bubble_sort($array){

    $count = count($array);

    if ($count <= 0) return false;

    for($i=0; $i<$count; $i++){

        for($j=$i; $j<$count-1; $j++){

            if ($array[$i] > $array[$j]){

                $tmp = $array[$i];

                $array[$i] = $array[$j];

                $array[$j] = $tmp;

            }

        }

    }

    return $array;

}

//快速排序(数组排序)

 

function quick_sort($array) {

    if (count($array) <= 1) return $array;

    $key = $array[0];

    $left_arr = array();

    $right_arr = array();

    for ($i=1; $i<count($array); $i++){

        if ($array[$i] <= $key)

            $left_arr[] = $array[$i];

        else

            $right_arr[] = $array[$i];

    }

    $left_arr = quick_sort($left_arr);

    $right_arr = quick_sort($right_arr);

    return array_merge($left_arr, array($key), $right_arr);

}

  1. 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组

//二分查找(数组里查找某个元素)

 

function bin_sch($array, $low, $high, $k){

    if ($low <= $high){

    $mid = intval(($low+$high)/2);

    if ($array[$mid] == $k){

    return $mid;

    }elseif ($k < $array[$mid]){

    return bin_sch($array, $low, $mid-1, $k);

    }else{

    return bin_sch($array, $mid+1, $high, $k);

    }

    }

    return -1;

}

//顺序查找(数组里查找某个元素)

 

function seq_sch($array, $n, $k){

    $array[$n] = $k;

    for($i=0; $i<$n; $i++){

        if($array[$i]==$k){

            break;

        }

    }

    if ($i<$n){

        return $i;

    }else{

        return -1;

    }

}

  1. 写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数

//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序

 

function array_sort($arr, $keys, $order=0) {

    if (!is_array($arr)) {

        return false;

    }

    $keysvalue = array();

    foreach($arr as $key => $val) {

        $keysvalue[$key] = $val[$keys];

    }

    if($order == 0){

        asort($keysvalue);

    }else {

        arsort($keysvalue);

    }

    reset($keysvalue);

    foreach($keysvalue as $key => $vals) {

        $keysort[$key] = $key;

    }

    $new_array = array();

    foreach($keysort as $key => $val) {

        $new_array[$key] = $arr[$val];

    }

    return $new_array;

}

 

 

 

 

 

 

 

 

PHP周边问题

  1. 说出你常用的版本控制器?

SVN , GIT

  1. Linux常用的命令,知道哪些?

a) ls, pwd, cd, cat, vi, service, chmod, chown, tar, su等。

  1. Linux的定时任务如何执行?

使用crontab执行。

Linux中你应该先输入crontab -e,然后就会有个vi编辑界面,再输入0 3 * * 1 /clearigame2内容到里面 :wq 保存退出。

crontab文件中如何输入需要执行的命令和时间。该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。

每个域之间使用空格或者制表符分隔。格式如下:

minute hour day-of-month month-of-year day-of-week commands

合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday) commands(代表要执行的脚本)

除了数字还有几个个特殊的符号就是"*""/""-"","*代表所有的取值范围内的数字,"/"代表每的意思,"/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。

每天早上6

0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都emailroot的信箱了。

每两个小时

0 */2 * * * echo "Have a break now." >> /tmp/test.txt  

  1. Linux如何安装ApachePHPMySQLNginx?

a) 用的CentOSYum安装。生产环境有专门的运维工程师负责。

  1. SSHSCP用法。

()

 

 

 

 

 

 

前端问题

  1. 都用过哪些JavaScript框架?

a) jQuery和扩展。

  1. JavaScriptthis指向问题?

javascript 中的 this 有 五种情况:

1.全局范围:

会指向 全局对象( 浏览器下指window

2.全局函数调用:

还是指向全局对象。

3.对象函数调用:

调用某个对象的函数, 它指向 当前对象。

4.使用 new 实例化对象时:

它指向 新创建的 对象。

5.调用某些方法时:

如: Function.prototype 上的 call 或者 apply 方法 以及 with

它指向 传入的对象。

  1. 谈谈你对prototype的理解?

a) 每个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数实例共享的方法和属性,也就是说将函数用作构造函数调用(使用new操作符调用)的时候,新创建的对象会从原型对象上继承属性和方法。

b) prototype 属性使您有能力向对象添加属性和方法。

  1. 谈谈你对Bootstrap的理解。

()

 

posted on 2016-12-06 11:42  PHP博客园  阅读(143)  评论(0)    收藏  举报

导航