Monthly Archives: 六月 2015

书摘·学习英语与从事英语工作的人生历程

他(吴宓)家和我家同住一所楼房(他家住楼下,我家住楼上)。我家有一辆人力车放在楼下过道处,车上有一个铃,我很喜欢去弄响那个车铃。吴先生很用功,看书和写作十分勤奋。我按车铃,往往惊扰他的文思。他走出书房阻止我好几次,但我过一会儿又忍不住按铃。他实在忍无可忍,打了我几下。我写这个小插曲是想说明我的恩师吴宓先生在我幼儿时代就和我相识
……
祖父心疼我和赋洋,分给我们每人一块饼,谁知被老鼠偷去。
……
西安围城共八个月。城开之时,农民从城郊挑着新鲜蔬菜进城来卖。城中幸存者欢欣高呼:“城开了!”据说于右任率领国民革命军解了城围。这是我幼年时期发生的一件大事,从此我养成了节约粮食的习惯。罗曼罗幼年贫困,在他的名著Jean Christoph(《约翰·克利斯朵夫》)中有“我尊重面包”(Je respect du pain)的名句。
……
从吴先生的讲课我认识到要取得好的教学效果最好不要看讲稿,而是全神贯注地面向学生,这样才能使学生感受到作品的魅力,并对学生起潜移默化的作用。
……
法语和德语的【r】都用小舌发音,我用喉头含水漱口的办法不断练习,终于学会了。后来我在耶鲁大学读研究生时,到时Robert Menner曾称赞我的法语和德语的读音比美国同学好得多。
……
(南铣)文化大革命期间下方外地,夜间不幸落水溺亡,令人悼念不已。南铣对古文字也有研究,陈梦家先生对他很欣赏。钱钟书先生和他是同乡,也说他是个怪才。我想这样的怪才不能有更大的共享,因为一是精力过于分散,二是缺少机遇。看来做学问还是要既专又深,这是一条规律。
……
1937年终,1938年初,武汉失守,长沙形势危急。由于战局的逼迫,“教育部”改长沙临时大学为西南联合大学,内迁云南昆明。身体健壮的男生,在增绍伦、闻一多等教授的率领下,组成徒步旅行团从长沙出发,经贵州直抵昆明。经过三个月的跋涉,胜利地到达昆明。这件事在中国教育史上值得大书特书。体弱的男生、女生和大多数教师走海路前往昆明。
……
可是,有一天早晨(1938年3月8日),牛其新同学带着香港版《大公报》来告诉我:我父亲在西安病逝,只活了56岁。当时我20岁,我弟弟赋洋17岁,高中尚未毕业。我去中山大学找一位陕西同乡姓杨的工学院教授,向他请教我应否立即回西安奔父丧。杨先生说战火连天,兵荒马乱,我还是随同学去云南继续求学,将来有机会再回西安省母探亲。我听了他的劝告,暗中哭泣了数日。想到今后我必须依靠自己,才能有前途。我下了决心要更加勤奋地用功、学习,不辜负父亲生前对我的期望。
……
在蒙自一学期(三年级下学期),我充分利用并不丰富的英文图书,训练快速阅读的能力,争取每日阅读一册。我发现这种能力对后来我在耶鲁大学读研究生时,每周阅读四个莎士比亚时代的戏剧很有帮助。快速阅读一方面训练,抓作品大意的能力,另一方面培养鉴赏英文文体风格的兴趣。
……
当我第一次听到亚里士多德给悲剧下的定义,说悲剧激发怜悯和恐惧(pity and terror)两种感情,并且净化(catharsis)这两种感情,我感到十分兴奋和有趣。
……
钱先生(钱钟书)从牛津大学学成归来,受清华大学之聘,职称为正教授。在清华这个聘任是破格的。一般从国外归来的留学生只聘为专任讲师(相当于副教授)。这是因为钱先生学贯中西。他父亲钱基博先生是著名的国学大师。钟书先生考入清华大学外文系以前已打好非常结实的国学基础。他过目不忘,勤奋读书,对西方的典籍也十分熟悉。基博先生与吴宓先生相识,命钟书入学后拜见吴宓先生。吴先生对钟书的博学十分欣赏。他曾说钟书向他推荐西文新书,这是一年级新生中从来没有发生过的事情。
……
文学研究是一门复杂的学科,因为文学反映社会现象。要想说明一种现象,必须掌握充分的证据。钱先生讲课,每个论点都有事实根据,因此他在黑板上写出拉丁、德、法、意大利各种语言的引文来证实他的论点。这样他给学生师范做学问的严格性。
……
我开始体会到研究西方文学必须重视西方思想史。这样才能训练青年人的分析和评论能力。他(钱钟书)还鼓励我们多学外语,看第一手材料。尤其是要学好法语。他自己就在法语上下过很大的工夫。在西方文学史中国,各时期法国文学总是居于领先地位,因此首先要学好法语。
……
钱先生(钱钟书)在西南联大教了一年书,离开昆明去湖南蓝田国立高等师范外语系教书。原因是他父亲钱基博先生在该校任中文系主任,约他前往相聚。钱先生遵从父命前往,绝非西南联大排挤他。他在蓝田师院教了一年书,观察到教育界的一些可笑、可耻的现象。一年后,他回上海,与夫人杨绛女士和女儿钱媛团聚。他在上海《学林西报》社工作,业余开始写他的小说《围城》,一般读者认为钱先生的学术水平莫测高深,但都爱读《围城》,也爱看着小说改变成的话剧和电视剧。
……
吴达元先生的教学法严格、认证,批改法文作文一丝不苟。他的教学法和教学态度也影响了我以后教书的实践。
……
周翰爱慕清华十级外文系毕业的王还学长(福建人,北平生长;上海中西女校毕业)。她是西南联大北京大学聘任的外文系助教。当时日本飞机市场轰炸昆明。来警报时,师生都到郊外躲避。王还总是独行。我鼓励周翰向前陪伴。终于有情人皆成眷属。他们去昆明附近的安宁温泉旅行结婚。同学们都为他们高兴。
……
第二次世界大战期间,英国粮食短缺,我曾从美国给周翰夫妇寄过大米。周翰也曾寄书回赠。
……
在物质条件贫乏的情况下,师生们能够坚持教学和可言,继续不断地出成果,这是非常难能可贵的……后来杨振宁上清华研究生,常来我们宿舍与黄昆讨论物理问题。这种讨论是十分有益的。回想我在蒙自上三年级下学期时,曾与同班同学王佐良、许国璋、李博高,以及十级政治系同学方矩城学长等人组织Lakeside Esquires英语演说和辩论会,讨论问题,收到很好的效果,对于促进血液,培养和锻炼思考和解决问题的能力有很大的好处。后来在昆明,我们已当了青年教师,历史系九级丁则良学长和王佐良发起研究学问和讨论问题的学会,请潘光旦先生取名为“十一学会”。潘先生解释道:“推十合一谓之士。”我们知识分子有能力对事物做出规律性的评论。后来我到美国留学,以及后来方位耶鲁大学和康奈尔大学,师生在饭桌上和散步时往往讨论学术问题。这种风气在抗日战争时期的西南联大已很盛行。希望今日我国高校能继续发扬提倡。当年黄昆和杨振宁讨论物理问题给我留下了深刻的印象
……
外文系除英语外。还未本系和全校各系开设法语、德语、俄语、日语等第二、第三外语。文、法学院学生多选修第一年发文和第二年法文,理科生多选修第一年德文和第二年德文。一般都能达到阅读专业书刊的程度。对外文系学生则提出更高的要求,一般必须修满三年法语或德语,要求除能阅读专业书刊外,还能阅读文学作品。
……
我去美国后,幸亏管留学生的China Institute分配我去Yale,才能懂得如何作研究。我佩服和我同事考取的王浩(比我小四岁,山东人,西南联大数学系毕业,金岳霖先生知道他学数理逻辑,但因金先生出国讲学,主要由王宪钧先生指导)。虽被分配到Brown University,但他坚决要转学Harvard。他说他在Brown上了几周课,看见图书管里学生很少,而球场上却人很多。由于任华先生(清华第七级哲学系毕业,时在Harvard读博士)的帮助,终于转学成功。王浩在两年之后就拿到博士学位,导师名叫Quine,是国际知名的数理逻辑专家。王浩取得学位后,曾在Princeton大学Einstein研究所和牛津大学作研究,成绩突出。Harvard聘请他教书。他一方面研究理论,一方面注意使用。他的研究成果促成了计算机的发明。王浩的例子说明选择学校的重要性。但个人的努力争取更为关键。王浩是西南联大培养的杰出人才之一。
……
我(李赋宁)和当时在英国牛津大学留学的王佐良和许国璋学长,以及在美国芝加哥大学留学的周珏良学长通信相约,将来学成回到清华外文系教书。我教中世界,佐良教文艺复兴和莎士比亚,国璋教18世纪,珏良教19世纪(以诗歌为主)。
……
当时我国教育制度从学习英、美、德、法转为学习苏联。实际上,学习苏联只学到重视实用外语,而未重视科研方法。拿英语为例:我们教毕业班英语精读课要集体备课,自编教案,选出活用字(active words),编成例句,让学生模仿,练习复用。这种外语教学法的缺点是让学生“见树不见林”(not to see the forest for the trees),不能帮助他们连贯、完整地表达思想。不过学生也学会了一些有用的词汇。在这种情况下,我要求学生每周写一篇英文作文,使他们能够笔头连贯地表达类似的思想,这种教学法我认为很有用。学生学习很女里,基础也不错,还是培养出不少英语方面的人才。一般用人单位都称赞北大毕业生“有后劲”,原因是我们一方面帮助学生打好听说、读写、译的基本功,同时扩大学生的知识面,以利于解决毕业后工作中的实际问题。
……
我(李赋宁)始终认为一、二年级要打好听、说、读、写的基本功。从三年级开始,就要读英文文学作品的原著,四年级要开始学一点语言、文学研究方法。总之,大学的外语系既要造就外事人才,也要训练研究人才,所以本科的目的就是要照顾到各方面的需要。
……
随后,从国外传入了各种英语教学法:直接法,听、说领先法等。但我认为读和写应放在首位,因为真正学好英语,必须多读书,而且能准确、熟练地笔头表达思想。我常说:“要落实到鼻头,才能牢固掌握。”“We must make every course a writing course.”
……
我们的大学英语课不能满足于让学生只会说生活英语。学生要能使用英语谈论各方面的事物,包括文学和艺术。教师在课堂上起示范作用,学生逐渐也学会用英语谈论各种问题,并能说得准确、流畅,听起来像真正的英语。
我(李赋宁)讲课常常被故事的情节和人物所感动。例如,讲《德伯家的苔丝》中的苔丝紧紧地抓住她的订婚戒指,生恐被她的未婚夫遗弃。又如,讲Charles Lamb的“Dream Children”时,我自己感动得声泪俱下,学生也受到感动。这样的教学效果是不错的。
……
王瑶学长岁常遭红卫兵殴打,却从容不迫地抽他的烟斗。
……
法语学生用法语斗争地主,传为笑谈。地主不懂法语,但知道是在斗争他,吓得发抖。
……
我根据每个学生的程度来提高他们的程度。程度好的学生,如冯彬、谢丽红,她们已能翻译英文小说。我就设法在她们的基础上进一步提高。对于程度差的学生,我着重为他们补英语语法,让他们练习造句,写简单的英文作文。我这种“个别辅导”的教学法,英文叫做“individual attention”,似乎颇见成效。
……
吴先生(吴宓)在“文革”期间受到残酷迫害、诬陷和拷打,以至腿断、失明,悲惨去世。吴先生一生都奉献给外国文学教学、研究和翻译事业,桃李满天下,是创业一代的杰出代表。
……
姜椿芳同志精力过人,他几乎参加了每一分卷的讨论。
……
最令我惊异的是成都自学成才的青年张隆溪。他是老三届高中毕业生,下放在农村。自己读英文《圣经》,又把元曲译成英文。幸遇川大英语系教授谢文炳先生借书指点。又经四川文联主席、西南联大中文系毕业生马识途推荐给北大历史系总支书记徐世谦(南开中学毕业,西南联大历史系毕业,曾上过我教的“第一年法语”)。许同志把张隆溪译的作品拿给我看,问是否能达到北大英语系硕士研究生的标准。我看后,立即鼓励他报名。他那年32岁,考试成绩在第一次录取的12名硕士生中名列第一。
……
英语作为国际通用的语言,也受到语言学家的关注。Ogden和I.A. Richards选出850个最常用的语词,名之为Basic English,希望在全世界推广。他们编了教科书,并把世界文学名著译成Basic English。据说,第二次世界大战期间,英国首相丘吉尔和美国总统罗斯福都支持这种简化英语。Richards另一方面的影响是在我国推广Basic English。这种简化的英语利用850个单词来表达英语各方面的食物,简单易学。他在中国开始宣传Basic English,并和清华美国教授Robert Jameson和Robert Winter成立了Orthographical Soceity(正字学会),希望推广Basic English。
……
Yale-China Association每年都要选派耶鲁英语系毕业生到长沙雅礼中学教英语。
……
我回国后,不就朝鲜战争爆发,国内掀起抗美援朝运动,温德先生是美国人,受到歧视,被剥夺了教书的权利。他的日子愈来愈不好过,但他决心与中国人民同命运,仍坚持留在中国。1950年圣诞前夕我去看他,他说印度朋友曾邀请他去印度,但他决心不离开中国。
……
“文革”期间,温德先生受到更大的上海。他被抄家,隔离审查。直到拨乱反正,周培源先生任北大校长,温德先生才得安稳生活。他在中国任教60多年,是我们真正的朋友,为我国培养了许多杰出的外语人才,他的贡献值得我们尊敬和感谢。周培源校长为他庆贺了100岁生日。两周后他便离开了人间。他的母校Wabash College一位英语教授来到北大任教,带来了母校给温德校友的溶于。那位教授在北大收集材料,准备为温德先生写传。我认为我国人民一定要记住温德先生对我国外语教育事业的功绩。
……
当Maynard Mack教授得知我在北京大学任英语系系主任,他很高兴,认为他的学生有出息。
……
我国几个像北大、清华、南大、浙大等名牌大学都在争取办成国际上第一流的大学。外国的和我们自己的经验值得参考。首先要招国内高中毕业的最优秀的学生,以保证新生的质量。德、智、体全面发展是需要的。要培养好这一批优秀的青年人,师资队伍也必须是第一流的。……另外一条好经验是聘请国外知名学者来清华讲学。
……
要把国内大学的外文系办成国际上第一流大学的水平,我观察了哈佛大学、耶鲁大学、康奈尔几个名牌大学的特点,归纳了几个要点:首先要从国际上最有成就的学者当中聘请教授,进行教学,指导研究生,使学科的发展达到前沿。同时要有第一流的学生来继承教育事业,使学科不断发展。另外一个条件是图书和期刊的积累。哈佛图书馆的藏书,除美国国会图书馆外,在美国各大学中排名第一,耶鲁第二。康奈尔除总管Olin Library外,全校共有14个分馆。但是,人的要素第一,讨论、争辩,互相启发,才能把学科推向前沿。本科生由教授讲大课,由助教负责答疑。研究生用小班上课方式,第一个月由教授主讲,示范讲课和研究方法。教授把讲授和研究的内容分配给每一位研究生,请他们预先准备,轮流向同学报告,由研究生相互评论,然后教授加以总结。……这样的教学可以调动研究生的主动性和积极性,对培养人才是一个好途径。
……
对英语专业的学生来说,学会法语或德语也是十分必要的。英语一方面与德语同源,都是西日耳曼语,另一方面法国统治英国近300年,法语成为英国上层社会的语言,因此英语词汇中增加了大量的法语词汇,而法语是拉丁语系,给英语增添了许多有用的成分,大大地丰富了英语的表达手段。学会法语能促进英语的提高。我自己的经验就是用法语来促进英语的提高。
……
外文是一个多功能的工具,青年人学好了外文可以从事各方面的工作。因此大学外文系不能局限于培养外文教师和发展学科,而应把培养目标定为多方面的。
青年人在选择未来职业时,往往感到困惑。教师的帮助是很需要的。吴宓先生毕业于清华学堂,打算到美国大学读化工系。可是当时清华校长周贻春先生对这个学生非常了解,知道他爱好文学,因此替他选择了University of Virginia的英国文学系。这个选择决定了吴宓一生的事业。
……
我不赞成直译的文学作品,因为既不能表达原文的风味,又不符合中文的习惯。
……
我所教过的学生的确人才辈出。考取北大的学生一般中学基础好,勤奋努力,学有所成。在学术、外交界都有不少有成就的人,我培养了他们,感到十分欣慰。英文有一句名言:“The consolation of a teacher is to have students”(一个教师的安慰就是有学生)。我选择了教书这个职业感到幸福。
……
回顾我走过的一生,我之所以能用英语为培养学生做出一点贡献,首先得感谢父、母养育之恩,感谢我受业的老师和于我共同切磋学问的同学和同事,与我教学相长的学生。陪伴我至今已50多年的爱妻述华给我安慰、劝告和支持,使我平安度过为难和疾病与精神上的痛苦。我这一生很幸运,能够与老板共同来到21世纪。我们希望能够继续发挥余热,看到国家日益昌盛、富强,人民的日子愈过愈好,尤其是科技、文化有了很大的提高,青年一代茁壮成长,我们感到非常欣慰和幸福。
……
在58年前的1946年暮春,那时抗战胜利不久,赋宁和我(述华)初次相识,他约我、他的堂姑(也是我高中时的级主任李凤瑞老师)和他的一位同乡在蓉城锦江边上的望江楼薛涛井旁的茶座喝茶闲谈,那时赋宁29岁,我22岁,正是充满了希望与幻想的年龄,也就在同一年的初秋,很巧合,我们又在南京相会,我们愉快地荡舟玄武湖,数着石阶梯欢笑着走进中山陵,还登上灵谷寺高处。我们在南京订婚了,然后赋宁远渡重洋去美国耶鲁大学深造,读过整整四年漫长的岁月,虽然远隔千山万水,但我们的心仍然紧紧连在一起。新中国成立了,赋宁欢欣鼓舞地急于回到祖国,以便用学到的知识为祖国服务,同时也盼归来与我团聚。1950年又是初秋季节,我们在清华园工字厅,举行婚礼。自此我们成为一家人。我们两人都在大学教书,都将身心投入到教学工作中。婚后的生活虽说比较平淡,但也充满了温馨、乐趣与发自内心的欢笑。随着社会的变革,日子渐渐不再那么风平浪静,而是难免有疾风骤雨、惊涛骇浪,我们走过的路也不再是那么平坦,有时候充满阳光,但难免路上荆棘丛生,泥泞难行,甚至会使人滑倒,陷入泥坑中。赋宁和在顺境中欢乐同享,在逆境中,则相互支持、鼓励和帮助,相互吸取了无穷的力量,这才能平平安安走出荆棘,跨国泥坑,度过灾难。并终于能手牵手共同进入21世纪。
跨入新世纪时,我们都已是退休老人了。这时总算有一个比较宽敞、安适的家居,可是我的年龄已逼近80岁,赋宁也远超过80岁。我们同甘共苦,相濡以沫,历经风雨,相依相伴共度了50对年,现在都老了,更加互相依恋。往日我每次外出归来,他似孩子般高兴地说:“我在阳台上已盼你好久了,你平安回来,我就放心了。”有时候还会补充一句:“你不在家,我真想你。”而当他去楼下,在小区内特开辟的弯曲小道上散步时,我在阳台上见到他缓慢,但仍然稳步地向前走,我感到无比欣慰,可是今日我站在阳台上,弯曲的小道依旧,而我已无处寻觅赋宁的身影。我泪眼模糊,深深地怀念赋宁。当我回忆赋宁,提笔写赋宁时,他的面影似又温存地微笑着回到我身旁。
……
赋宁晚上睡得很晚,而白天常常手提一蓝布书包,或者去上课,或者奔赴图书馆阅览室去看书,查书,往往闭馆才离开。我们周末进城,他有时去旧书店逛,却很少去书店买书。他说图书馆的藏书最丰富,借阅也很方便,阅览室是最好的地方,无人打扰,可以任意索取所需的书浏览。冯新德先生的夫人叶学洁老师曾多次告诉我,只要他进图书馆阅览室,必定看见李先生在那里看书,旁边放一蓝布书包。……他的蓝布书包确实十分引人注意。提到赋宁的蓝布书包,我(述华)情不自禁地想起侄婿韦加宁大夫(著名手外科专家,2003年国家人事部授予他“白求恩奖章”,北京市授予“人民好医生”称号)。他曾经给我们讲了一个令人难忘的故事。加宁说他想叔叔(指赋宁)学习,常提一布书包。一次天津某医院请专家会诊,他提一布书包就去了,医院派专车去接他,却找不到韦大夫,接人的同志未料到手提一布书包,穿着普通的他,便是著名的韦加宁大夫。
赋宁无论做什么工作,总是非常勤奋努力去完成。他的工作态度非常严谨,从来不苟且。近两年有余他年老体衰,在写回忆录时偶有笔误,而以往他的自己十分工整,标点符号也很清楚。几十年来他不停地、无休止地一笔一画工工整整地写讲稿,写发言稿,为刊物、报纸写文章。他不停地、无休止地给低年级、高年级的学生,给硕士生、博士生及进修教师批改作业、读书报告及论文。他非常认真、仔细地批改,逐字逐行,不放过一个句子,一个字,甚至一个标点符号。他做这些工作,绝非机械地完成任务,而是带感情的,对写得好的同志他一定称赞鼓励。赋宁的记忆力很好,在批改过程中,便记住了学生的特点,因材施教。
……
李赋宁先生来北大后已不在我班任教,可对我的学业仍非常关心。在四上的时候,他要了我的全部作文拿回家看,返回时给我如下的评语:
胡壮麟:
文章优点是思想内容丰富,表现手法含蓄有力,以“小东西”一篇为最精彩。
缺点是文章尚不够自然轻松,主要原因是对英语掌握不够好,应努力多读、多学有用的phrase和Idioms,尤其是注意这些正确用法,要学会用得恰当自然,多注意文字的预期,多朗诵好的文章,学习好文章的流畅。
李赋宁
……
赋宁可以做颇有见地的学术报告,写出高水平的论文,也可以极其耐心地对初学英语者降解基本语法和纠正他们的发音。
……
赋宁一生谦虚谨慎,平易近人,不为名、不为利。在知识界中,同行相忌几乎是通病。英语界几位知名教授如王佐良、许国璋、杨周翰等,他们是赋宁的同行,也是好友。他提到他们时总是满口赞扬。……赋宁无论对任何人,在任何场合都是谦让的。他在校内外参加合影留念时,他愿意尽可能靠边站、靠后站。一次赋宁回家告诉我,他去系里听见同志们讲一趣闻,说王岷源先生、乔泌同志和他三人一起开会或讨论问题时,三维先生彼此谦让座位,至少两三分钟。这三位都是拘谨有礼的,我可想像出来他们相互让座的情况,确实有点可笑,但在意料之中。我了解赋宁对同志礼让不仅仅出于礼貌,而是从内心尊重他人。他尊重师长、同辈以及学生,甚至家人。
……
赋宁不仅向师长、同辈虚心学习,也向学生学习,他的口头禅是教学相长嘛!
……
更早些时候,那是20世纪80年代中我同他去美国康奈尔大学时,他曾对我说,一位英语界著名教授告诉他,当时传说我国英语界的四个台柱子有赋宁,还有陈嘉、王佐良和许国璋。回国后,他从未向任何人谈起此事。
……
“文革”时吴先生(吴宓)受尽折磨,据说“四人帮”专政期间,号召批林批孔,由于吴先生不肯批孔,又受到残酷的批斗。腿被打断,后来眼睛也瞎了,由吴先生的堂妹吴须曼从西南师大接回老家泾阳,悲惨地走完最后一段路程。
……
赋宁提起1978年为吴宓先生平反之事时,从来不说自己做了哪些事,他认为都是他应该做的,义不容辞的事。在他的回忆录中写着“吴宓先生的平反是广州召开外国文学学会成立的大会上由冯至先生发起,由马家骏同志起草……”赋宁做了事,不谈自己的工作,只说别人的功劳,这便是赋宁的本色。
……
叶企孙先生不是赋宁的授课老师,但赋宁对叶先生很尊敬。赋宁曾说叶先生是梅贻琦校长最得力的助手之一,他帮助清华大学简历了理学院,他苦心竭力开创了物理系,并亲自教课。该系为我国培养了一批非常杰出的人才,宝库我国的两弹元勋、物理学界大师和诺贝尔奖获得者。叶先生对国家的贡献,功不可没。赋宁在任何时候,即使在叶先生身处困境时,遇见叶先生都恭敬且亲切地和他打招呼,与他交谈。在“文化大革命”前,我们去莫斯科餐厅,常看见叶先生在那里用餐。他终身未婚。穿着很普通,很可能美食一顿是他人生的一大享受。在“文化大革命”中叶先生穷困潦倒,甚至挨饿,传说他曾伸手向一位深知他而又共事多年的朋友借十元钱,这位先生为了与他划清界限,竟断然拒绝。可敬的叶企孙先生后来贫病交加悲惨死去。
……
令赋宁感动的是,在温德先生并不受重视时,罗经国仍然十分关心他,年迈体衰的老温德患病时,罗经国深夜亲自送老人去协和医院住院治疗。
……
张隆溪是老三届的高中毕业生,下放到农村。别的下放青年在休息或玩耍时,他在灯下苦读。幸遇四川大学英文系谢文炳教授给予指导,他又充分利用四川大学图书馆,自学成才。张隆溪对自己的英文程度,心中无数。据说他不敢报考北大研究生。后经四川文联主席、西南联大毕业生马识途推荐给当时任北大历史系总支书记的许世谦通知,而许世谦在西南联大念书时曾经上过赋宁的第一年法语。他直接把张隆溪翻译的文章拿给赋宁看。赋宁看后颇欣赏。虽然张隆溪未上过大学,赋宁不拘一格,鼓励他报考北大西语系的硕士研究生。考试结果,在所录取的十二名研究生中,他名列第一,后来又以优异成绩获得哈佛大学的博士学位。张隆溪曾寄给赋宁他在美国出版的著作。他先后在美国和香港的大学任教。
赋宁喜欢和才华横溢、人称“怪才”的人交朋友。朱南铣是清华大学哲学系比赋宁低一年的同学,他是赋宁的好朋友。朱南铣异常聪明博学,既通晓日文、满文,又喜欢哲学和数理逻辑,还对《红楼梦》的考证有研究,在这方面写过具有一定价值的著作。他对古文字也有研究。钱钟书先生称之为怪才。他和赋宁很谈得来。我们住在中关园时,朱南铣常来我家。他喜欢喝酒,我为他们略备小菜,他们对酌畅谈,二人十分高兴,谈兴肾浓。赋宁饮酒较有节制,而朱南铣常酩酊大醉,不醉无归。据说在“文化大革命”中,朱南铣下方外地,夜间喝了酒,在行走途中失足溺水而亡。另一位在北大颇知名的“怪人”是数学系的教师李同孚。他也是赋宁的朋友。李同孚不修边幅,常独来独往,不合群,他有时来我家。李同孚国学根底雄厚,赋宁常和他谈论旧诗词。他对英语、德语也颇感兴趣,且好买旧书,曾赠送赋宁两册。李同孚喜吹箫,有时候带上箫来我家,吹上一曲,十分悠扬动听。后来死在宿舍中,数日后才被发现,十分凄惨。
……
当我们两人在家时,他兴致来了,也放开嗓门唱一段,他唱时,虽然声音不很响亮,但是吐字清晰,韵味十足,他唱完,我为他热烈鼓掌,他自己也鼓掌,我说:“全体听众鼓掌。”他补充说:“一个是我老伴,一个是我自己。”两人十分开心地笑了。回忆此情此景,我似乎又回到那快乐的时刻,只是这样的时刻永远也不会再来临了。
……
最令人难忘的是独子山告急的消息传来时,我们正在上英文课“The Last Lesson”(《最后一课》),同学们止不住流泪了。时事与课堂教学大大激发了学生的爱国热情。我(述华)上高中时,我班上不少数理化成绩较好的同学都曾经抱有向居里夫人学习,学科学,将来为祖国做贡献的梦想。
……
天下事实在难以预料……
……
我们就这样安置了一个不洋不古、不中不西的我们自己的家。这使我想起赋宁告诉我的一句法语“petit a petit, loiseau fait son nid(鸟儿一点一点地搭它的窝)”。我们两人也像小鸟一样,一点一点地搭我们自己的窝。所幸解放初崇尚简朴,没有人笑话我们。我们感到高兴,终于有了自己的家。
……
他(赋宁)记得别人对他点点滴滴的好处,他无论做了什么都闭口不谈,认为是自己应该做的。
……
1991年由赋宁编著的《英语史》由商务印书馆出版了。他高兴地送我一本《英语史》。我看了前言,再翻开看下一页,赫然见到以下题词:

献给爱妻徐述华教授
————感谢她的鼓励和支持,
这本书才得以完成。

他默默地写书,从未透露要在书上书写表示感谢的话。可能他想让我惊喜,我见到后,确实很出乎我的意料,也很感动。我深知这是他真情的流露,他毫不掩饰。赋宁是及其纯真的。在西方将自己的著作献给妻子或其他人,并不罕见,而在我国,虽然已经改革开放了,但是当时尤其是一位老知识分子这样做,仍然是令人瞠目结舌的惊人之举。
……
我们(赋宁和述华)来了兴致,将一首我们在学生时代就已流行的歌曲之歌词略加改动如下:
The more we get together, together together.
The more we get together, the happier we will be.
For I love you profoundly, you love me deeply.
The more we get together, the happier we will be.
我们两人一起散步时,或在家中,喜欢愉快地合唱这支歌曲,不妨戏称之为《老伴情歌》。
……
我们的祝酒辞是中西合璧的,是很独特的,写下留作纪念:
科学、勤劳、勇敢、独立、乐观。一切顺乎自然,处之泰然,必然愉快、幸福、健康、长寿。
Advanced in years, but youthful in spirit.
Diamond Wedding and out live it.
……
时光飞逝,当跨入2004年,在春节时,赋宁尚能迎宾客,唱京剧。可是我总感到他的生命竟似风下摇曳的烛光,日益微弱。这时我还坚持陪伴他在我们住的小区内曲折的小道上散步,我们手牵手缓慢地步行,我不慎踏在一浇水用的粗塑料管子上,摔倒了,这时候赋宁用尽全力拉着我,才使得我不致摔伤。我至爱的老伴在自己身体已经很虚弱的时候,仍竭尽全力保护我,回想至此,我内心酸楚,禁不住泪如雨下。
……
一日我(述华)从医院回家,偶然去他的书房,见到赋宁在书桌上留下他写的字条,已不再是以往他所书写的方正规整的楷书,而是歪歪曲曲,词不达意的字迹如下:
(字迹略)
我80岁生日是2004年3月3日。我明白他写的是“与述华共祝八十岁生日是人生最大的乐事”。我深深地感谢赋宁。我知他心,但见此条我心寒,心想这可能是赋宁的绝笔了。我哀痛万分,肝肠寸断。我去医院时,在病床边,贴近他的耳旁,低声唱我们的《老伴情歌》,我希望能唤醒他,能出现奇迹,但一切渺茫无望,终于令我魂飞魄散的时刻降临。2004年5月10日赋宁突然舍我而去,我可舍不得我的好赋宁,我日夜魂牵梦萦忘不了他。
……
星儿还不会爬的时候,赋宁将儿子放在草坪上,教儿子学爬行。他自己双膝跪在地上,笨拙地移动手脚,还叫星星像他那样向前爬。星儿像一小动物在爸爸后面蠕动,父子两人的动作,煞是可笑,当时较少照相,若拍照留作纪念,是很有意思的。虽然赋宁极爱儿子,但并未改变他去图书馆勤奋学习的习惯,他出家门提着蓝布书包上图书馆,回家先抱宝宝,确实是他当时真实生动的写照。
……
赋宁从黑帮大院归来后,曾告诉我,当年与他乘一条船赴美深造的一位德才兼备的同志,新中国成立后,在国内一名大学任教,因为他的业务好,思想又进步,在该校既为知名教授且兼任校党委委员。“文革”中突然被揪出来批斗。回家后又遭到孩子的批斗,以至心灰意冷,自尽身亡。据我所知,就我们所熟悉的知识分子不止他一位有如此遭遇。在那混乱的年代,不少知识分子无辜受冤屈,人格受侮辱,身体受摧残,这时候唯一的避风港只有自己的家。在外蒙冤受屈,若能向家人吐吐口水,亲情将如一股暖流,温软受伤害的心灵,给予慰藉和活下去的希望。此时如果受家人的冷遇,更甚者,遭家人拒之于门外,则会感到绝望,走上不归路,这不仅仅是家庭悲剧,往往对国家也是难以弥补的损失。
……
赋宁回家时,见儿子瘦了,脖子变得细细的,他心中好难受。赋宁想给儿子补充营养,他买了一只鸡,请人杀了,收拾干净,提回家给儿子炖鸡。但我从山东回家时,杨师母告诉我赋宁炖鸡的故事。她笑着说:“李先生把鸡放在锅里,加上水煮,他认为鸡汤已好,盛在碗里给儿子喝,自己一口也舍不得喝,待儿子喝尽了,补加水再煮,就这样反复几次,直到鸡也煮烂了,汤也无鸡味为止。”他主观上认为鸡汤的营养最丰富。这真是书生炖鸡的趣闻。赋宁爱子之心感人肺腑。
……
赋宁除了完成组织上交给他的工作外,千方百计让星儿能吃好,保证儿子的营养。一个时期他常骑车去海淀长征食堂要一个星儿爱吃的荤菜如滑熘肉片和一个素菜,盛在饭盒里,带回家给星儿吃,而自己简单地吃一顿。他有时也买一两白酒,就着一小盘猪头肉之类的下酒菜,借酒消愁。那时我在山东,他已不能做自己喜爱的业务工作,更不能孜孜以求地钻研学问,这是星儿在他身边恐怕是他唯一的安慰。
……
儿子(李星)高中毕业了。他是独生子女,不上山下乡,就地分配。……三年钳工的经理,不仅训练了他的动手能力,在吃苦耐劳方面也受到磨练,对儿子的成长是大有裨益的。由于他努力工作,不怕苦,不怕累,尊敬师傅,和年青工人相处也友爱团结,曾数次被评为先进工作者。一次赋宁在系里遇见赵萝蕤先生,她对赋宁说:“李先生,我祝贺你,你没有把儿子惯坏。”因为西语系的同仁们都知道赋宁很爱儿子,也比较惯纵他。赋宁回家后告诉我赵先生祝贺他未把星儿惯坏时,他向我发表他独特的见解,他说:“好孩子是惯不坏的。”可见赋宁对星星是很有信心的。
……
星星为没有考好,神情沮丧,此时赋宁和我都没有责备他,赋宁反而风趣地说:“星星,你是清华的走读生,我当年是清华的备取生,父子两人都一样。”
……
平时赋宁和我也较少谈他的外祖父,星儿知之甚少,而对他的祖父,亲友们弹起来都钦佩之至。他也看过介绍他祖父的书籍,知道他祖父是近代著名水利专家。一日星儿严肃且感叹地对赋宁说:“爸,你不如你爸,我不如我爸。”赋宁回答说:“我不如我爸,你将来比你爸强。”父子二人的对话别有风趣。我想赋宁的答话意在鼓励儿子。
……
留学期间,他(李仪祉)为了给国家省钱,不愿拿学位,认为只要知识学到手,学位不过是个荣誉而已。务实、不重名利,成为他一生事业的真实写照,也成为李家的做人准则。
……
不要怕做小事情,只要能做好几件小事情,最终还是可能做出大一点儿事情。
……
从美国回来,他(赋宁)就换上了中国的民族服装,在当时的教会学校燕京大学授课时,曾被学生嘲笑为“老土”。可听过他的课后,学生们就不能不肃然起敬了。
……
他(李星)说大学读什么专业并不重要,重要的是学会使知识和能力融会贯通的方法。做事要想得远一点,要考虑能不能对得起历史。
……
我们回国后,果然如愿以偿得到Drexel大学给星星的通知书。下一步是办理签证,需要提供上万元美景保证书的证明文件。原来在西语系工作的伍鸿森寄来了有律师签字的保证书。赋宁过去与他的交往不多,在需要时,无私地给予帮助,这种友情令人难以忘怀。
……
1985年付清和我再度赴美时……我们去了星儿的宿舍,房间颇小,两个研究生同住一个屋子,他的小书桌是本色木料制作的,他睡的单人床,铁床架是买的,而床垫是拾来的,电视机也是从垃圾堆拾来的,自己动手修理好,再使用。星星的生活非常俭朴,一心扑在学习上,因为他深知这样的学习机会来之不易。
……
赋宁失重不渝地奉行他的座右铭:“朴素的生活,高尚的思想,勤奋严谨,吸取世界上古往今来的文化精粹”,执著地走完他的一生。
……
一个个人、一桩桩事都永远铭刻在我(述华)心上。我不禁遐想赋宁在天之灵定会像往常一样微笑着向这些人们深深地致谢。


以上,
滕运锋,2015年6月28日,摘抄于浙江东阳横店。

CSS Selectors, Pseudoclasses, and Pseudoelements

Selector Type Example Note
Universal selector * { color:#555; } /
Type selectors b { color:red; } div,p select all <div> elements and all <p> elements.
Class selectors .classname { color:blue; } /
ID selectors #idname { background:cyan; } /
Descendant selectors span em { color:green } Select all <em> elements who have a parent element of <span>.
Child selectors div > em { background:lime; } Select all <em> elements who have a direct parent element of <div>
Adjacent sibling selectors i + b { color:gray; } Select the <b> element who is directly after the <i> element, and meanwhile both the <i> and <b> elements should be within a same parent element.
Attribute selectors a[href=’info.htm’] { color:red; } /
Pseudoclasses a:hover { font-weight:bold; } /
Pseudoelements p::first-letter { font-size:300% } /

Common Window Properties

Common window properties
Property Description
closed Returns a Boolean value indicating whether or not a window has been closed
defaultStatus Sets or returns the default text in the status bar of a window
The defaultStatus and status properties can be set only if users have modified their browsers to allow it (very unlikely).
document Returns the document object for the window
frames Returns an array of all the frames and iframes in the window
history Returns the history object for the window
The history object cannot be read from (so you cannot see where your visitors have been surfing), but it supports the length property to determine how long the history is, and the back, forward, and go methods to navigate to specific pages in the history.
innerHeight Sets or returns the inner height of a window’s content area
When you need to know how much space there is available in a current window of the web browser, just read the values in window.innerHeight and window.innerWidth.
innerWidth Sets or returns the inner width of a window’s content area
When you need to know how much space there is available in a current window of the web browser, just read the values in window.innerHeight and window.innerWidth.
length Returns the number of frames and iframes in a window
location Returns the location object for the window
name Sets or returns the name of a window
navigator Returns the navigator object for the window
opener Returns a reference to the window that created the window
outerHeight Sets or returns the outer height of a window, including tool and scroll bars
outWidth Sets or returns the outer width of a window, including tool and scroll bars
pageXOffset Returns the number of pixels the document has been scrolled horizontally from the left of the window
pageYOffset Returns the number of pixels the document has been scrolled vertically from the top of the window
parent Returns the parent window of a window
screen Returns the screen object for the window
The screen object supports the read-only properties availHeight, availWidth, colorDepth, height, pixelDepth, and width, and is therefore great for determining information about the user’s display.
screenLeft Returns the x coordinate of the window relative to the screen in all recent browsers except Mozilla Firefox
(for which you should use screenX)
screenTop Returns the y coordinate of the window relative to the screen in all recent browsers except Mozilla Firefox
(for which you should use screenY)
screenX Returns the x coordinate of the window relative to the screen in all recent browsers except Opera, which
returns incorrect values; supported in versions of IE prior to 9
screenY Returns the y coordinate of the window relative to the screen in all recent browsers except Opera, which
returns incorrect values; supported in versions of IE prior to 9
self Returns the current window
status Sets or returns the text in the status bar of a window
The defaultStatus and status properties can be set only if users have modified their browsers to allow it (very unlikely).
top Returns the top browser window

AJAX

Introduction

Here is the description of Ajax from Wikipedia:

Ajax (also AJAX; short for asynchronous Javascript and XML) is a group of interrelated Web develoment techniques used on the client-side to create asynchronous Web appications. With Ajax, web aplications can send data to and retrieve from a server asynchronously (in the background) without interfering with the display and behavior of the existing page. Data can be retrieved using the XMLHttpRequest object. Despite the name, the use of XML is not required (JSON is often used in teh AJAJ variant), and the requests do not need to be asynchronous.

Ajax is not a single technology, but a group of technologies. HTML and CSS can be used in combination to mark up and style information. The DOM is accessed with JavaScript to dynamically display – and allow the user to interact with – the information presented. JavaScript and the XMLHttpRequest object provide a method for exchanging data asynchronously between browser and server to avoid full page reloads.


Using XMLHttpRequest

To use XMLHttpRequest, you must understand the three ways of creating an XMLHttpRequest object:

  1. IE 5: request = new ActiveXOjbect(“MIcrosoft.XMLHPPT”)
  2. IE 6+: request = new ActiveXObject(“Msxml2.XMLHTTP”)
  3. All others: new XMLHttpRequest()

Therefore, the code below will work for all major browsers released over the last few years.

Table: An XMLHttpRequest object’s properties
Properties Description
onreadystatechange Specified an event handing function to be called whenever the readyState property of an object changes.
readyState An integer property that reports on the status of a request. It can have any of these values:
0 = Uninitialized
1 = Loading
2 = Loaded
3 = Interactive
4 = Completed
responseText The data returned by the server in text format.
responseXML The data returned by the server in XML format.
status The HTTP status code returned by the server.
statusText The HTTP status text returned by the server.
Table: An XMLHttpRequest object’s methods
Methods Description
abort() Aborts the current request
getAllResponseHeaders() Returns all headers as a string
getResponseHeader(param) Returns the value of param as a string
open(‘method‘,’url‘,’asynch‘) Specifies the HTTP method to use (GET or POST), the target URL, and whether the request should be handled asynchronously (true or false)
send(data) Sends data to the tareget server using the specified HTTP method
setRequestHeader(‘param‘,’value‘) Sets a header with a parameter/value pair

Regular Expression

Summary of Metacharacters in Regular Expression
Metacharacter Description
/ Begins and ends the regular expression
. Matches any single character except the newline
element* Matches element zero or more times
element+ Matches element one or more times
element? Matches element zero or one time
[characters] Matches a character out of those contained within the brackets
[^characters] Matches a single character that is not contained within the brackets
(regex) Treats the regex as a group for counting or a following *, +, or ?
left|right Matches either left or right
[lr] Matches a range of characters between l and r
^ Requires match to be at the string’s start
$ Requires match to be at the string’s end
\b Matches a word boundary
\B Matches where there is not a word boundary
\d Matches a single digit
\D Matches a single nondigit
\n Matches a newline character
\s Matches a whitespace character
\S Matches a nonwhitespace character
\t Matches a tab character
\w Matches a word character (a-z, A-Z, 0-9, and _)
\W Matches a nonword character (anything but a-z, A-Z, 0-9, and _)
\x x (useful if x is a metacharacter, but you really want x)
{n} Matches exactly n times
{n,} Matches n times or more
{min,max} Matches at least min and at most max times

Table Tag in HTML

Example

The following is an example code for a table consisting of 2 lines and 3 columns.

The table resulting from the above-mentioned code in a web browser is as below:

Line 1, Column 1 Line 1, Column 2 Line 2, Column 3
Line 2, Column 1 Line 2, Column 2 Line 2, Column 3

Web Browser Supporting Profile

Supporting Browsers: IT, Firefox, Chrome, Safari, Opera
Unsupporting Browsers: /
Conclusion: All major browsers support the <table> tag.


Optional Properties

Property Value Description
align left
center
right
You are advised to abandon using this tag any more.To achieve the equivalent effect, you can use corresponding style code.
This tag is used to define the relative alignment of the table to its surrounding elements.
bgcolor rgb(x,x,x)
#xxxxxx
colorname
You are advised to abandon using this tag any more.To achieve the equivalent effect, you can use corresponding style code.
This tag is used to define background color of the table.
border pixels This tag is used to define the width of the table border.
cellpadding pixels
%
This tag is used to define the padding area between the cell broder and the content in the cell.
cellspacing pixels
%
This tag is used to define the space between cells.
frame void
above
below
hsides
lhs
rhs
vsides
box
border
This tag is used to specify which part of the outer border is visible.
rules none
groups
rows
cols
all
This tag is used to specify which part of the inner border is visible.
summary text This tag is used to define the summary of the table.
width %
pixels
This tag is used to define the width of the table.

Video Tag in HTML5

Video Size is Adjusted in Proportion to Its Original Size

If there is a video whose width and height are respectively 800px and 600px, then you can resize it by setting propertities width and height.
However, you should be noted that the size of the video is adjusted in proportion to its original size, and if you try to set a size which is not in proportion to its original size, the vidio will adjust its size in proportion to its original size as per the relatively short length (width/height).
This means that if you set a size of 2400px width and 1200px height, the resulting size you got will be 1600px width and 1200px height.

Chart in English

Recently I tried to use English while charting in Tencent QQ and WeChart, both of which are application softwares produced by Tencent company. But I found many people do not like my using English. There are many reasons. Some think that I was showing my English in order to evidence my Elglish level in front of them. Some think I did not love my country and prefer foreign countries to China.
My god! First of all, my English is not good, therefore I need more practice. I use English just for communication, not for evidencing or showing my English level. And there are so many English speaking countries, I even myself do not know which foreign country I love, but you know which country I love. I just want to laugh, to laugh at your knowing about me.

Test your knowledge of PHP

Chapter 4

1. What actual underlying values are represented by TRUE and FALSE?

In PHP, TRUE represents the value 1 and FALSE represents NULL, which can be thought of as ‘nothing’ and is output as the empty string.

2. What are the simplest two forms of expressions?

The simplest forms of expressions are literals (such as numbers nd strings) and variables, which simply evaluate to themselves.

3. What is the difference between unary, binary, and ternary operatoers?

The difference between unary, binary, and ternary operators is the number of operands each requires (one, two, and three, respectively).

4. What is the best way to force your own operator precedence?

The best way to force your own operator precedence is to place parentheses around is to place parentheses around subexpressions to which you wish to give high precedence.

5. What is meant by operator associativity?

Operator associativity refers to the direction of processing (left to right or right to left).

6. When would you use the === (identity) operator?

You use the identity operator when you wish to bypass PHP’s automatic operand type changing (also callled type casting).

7. Name the three conditional statement types.

The three conditional statement types are if, switch, and the ? operator.

8. What command can you use to skip the current iteration of a loop and move on to the next one?

To skip the current iteration of a loop and move on to the next one, use a continue statement.

9. Why is a for loop more powerful than a while loop?

Loops using for statements are more powerful than while loops because they support two additional parameters to control the loop handling.

10. How do if and while statements interpret conditional expressions of different data types?

Most conditional expressions in if and while statements are literal (or Boolean) and therefore trigger execution when they evaluate to TRUE. Numeric expressions trigger execution when they evaluate to a nonzero value. String expressions trigger execution when they evaluate to a nonempty string. A NULL value is evaluated as false and therefore does not trigger execution.

Chapter 5

1. What is the main benefit of using a function?

Using a functions avoids the need to copy or rewrite similar code sections many times over by combining sets of statements together so that they can be called by a simple name.

2. How many values can a function return?

By default, a function can return a single value. But by utilizing arrays, references, and global variables, any number of values can be returned.

3. What is the difference between accessing a variable by name and by reference?

When you reference a variable by name, such as by assigning its value to another variable or by passing its value to a function, its value is copied. The original does not change when the copy is changed. But if you reference a value, only a pointer (or reference) to its value is used, so that a single value is referenced by more than one name. Changing the value of the reference will change the original as well.

4. What is the meaning of scope in PHP?

Scope refers to which parts of a program can access a variable. For example, a variable of global scope can be accessed by all parts of a PHP program.

5. How can you incorporate one PHP file within another?

To incorporate one file within another, you can use the include or require directives, or their safer variants, include_once and require_once.

6. How is an object different from a function?

A function is a set of statements referenced by a name that can receive and return values. An object may contain zero, one, or many functions (which are then called methods) as well as variables (which are called properties), all combined in a single unit.

7. How do you create a new object in PHP?

To creat a new object in PHP, use the new keyword like this:

8. What syntax would you use to create a subclass from an existing one?

To create a subclass, use the extends keyword with syntax such as this: class Subclass extends Parentclass.

9. Who can you call an initializing piece of code when an object is created?

To call a piece of initializing code when an object is created, create a constructor method called __construct within the class and place your code there.

10. Why is it a good idea to explicitly declare properties within a class?

Explicitly decaring properties within a class is unnecessary, as they will be implicitly declared upon first use. However, it is considered good practice as it helps with code readability and debugging, and is especially useful to other people who may have to maintain your code.

Chapter 6

1. What is the difference between a numeric and an associative array?

A numeric array can be indexed numerically using numbers or numeric variables. An associative array uses alphanumeric identifiers to index elements.

2. What is the main benefit of the array keyword?

The main benefit of the array keyword is that it enables you to assign several values at a time to an array without repeating the array name.

3. What is the difference between foreach and each?

Both the each function and the foreach … as loop construct return elements from an array; both start at the beginning and increment a pointer to make sure the next element is returned each time, and both return FALSE when the end of the array is reached. The difference is that the each function returns just a single element, so it is usually wrapped in a loop. Thr foreach … as construct is already a loop, executing repeatedly until the array is exhausted or you explicitly break out of the loop.

4. How can you create a multidimensional array?

To create a multidimensional array, you need to assign additional arrays to elements of the main array.

5. How can you determine the number of elements in an array?

You can use the count function to count the number of elements in an array.

6. What is the purpose of the explode function?

The purpose of the explode function is to extract sections from a string that are separated by an identifier, such as extracting words separated by spaces within a sentence.

7. How can you set PHP’s internal pointer into an array back to the first element of the array?

To reset PHP’s internal pointer into an array back to the first element, call the reset function.

Chapter 7

1. Which printf conversion specifier would you use to display a floating-point number?

The conversion specifier you would use to display a floating-point number is %f.

2. What printf statement could be used to take the input string “Happy Birthday” and output the string “**Happy”?

To take the input string “Happy Birthday” and out the string “**Happy”, you could use a printf statement such as

3. To send the output from printf to a variable instead of to a browser, what alternative function would you use?

To send the output from printf to a variable instead of to a browser, you would use sprintf instead.

4. How would you create a Unix timestamp for 7:11 AM on May 2, 2016?

To create a Unix timestamp for &:11 AM on May 2, 2016, you could use the command

5. Which file access mode would you use with fopen to open a file in write and read mode, with the file truncated and the file pointer at the start?

You would use the w+ file access mode with fopen to open a file in write and read mode, with the file truncated and the file pointer at the start.

6. What is the PHP command for deleting the file file.txt?

THe PHP command for deleting the file file.txt is

7. Which PHP function is used to read in an entire file in one go, even from across the Web?

The PHP function file_get_contents is used to read in an entire file in one go. It will also read a file from across the Internet if provided with a URL.

8. WHich PHP system variable holds the details on uploaded files?

The PHP associative array $_FILES contains the details about uploaded files.

9. Which PHP function enables the running of system commands?

The PHP exec function enables the running of system commands.

10. What is wrong with the following XHTML 1.0 tag:

In XHTML 1.0, the tag

should be replaced with the following syntax:

All parameters must be quoted, and tags without closing tags must be self-closed using />.

Implicit and Explicit Casting

PHP is a loosely typed language that allows you to declare a variable and its type simply by using it. It also automatically converts values from one type to another whenever required. This is called implicit casting.
However, there may be times when PHP’s implicit casting is not what you want. In Example 4-37, note that the imputs to the division are integers. By default, PHP converts the output to floating-point so it can give the most precise value – 4.66 recurring.
Example 4-37. This expression returns a floating-point number

But what if we had wanted $c to be an integer instead? There are various ways in which this could be achived. One way is to force the result of $a /$b to be an integer value using the integer cast type (int), like this:

This is called explicit casting. Note that in order to ensure that the value of the entire expression is cast to an integer, the expression is placed within parentheses. Otherwise, only the variable $a would have been cast to an integer – a pointless exercise, as the division by $ b would still have returned a floating-point number.
You can explicitly cast to the types shown in Table 4-6, but you can usually avoid having to use a cast by calling one of PHP’s built-in functions. For example, to obtain an integer value, you could use the intval (获取变量的整数值,转为整数) function. As with some othersections in this book, this one is mainly here to help you understand third-party code that you may encounter.
Table 4-6. PHP’s cast types

Cast type Description
(int) (integer) Cast to an integer by dropping the decimal portion
(bool) (boolean) Cast to a Boolean
(float) (double) (real) Cast to a floating-point number
(string) Cast to a string
(array) Cast to an array
(object) Cast to an object