php里的空格怎么写,为什么很多人不建议使用驼峰命名法?
因为可能编撰者本人并不喜欢驼峰命名。
有些事情已经形成了较大范围的行业习惯了。类的命名使用大驼峰,方法和变量的命名使用小驼峰,常量全大写,并且使用下划线来分割单词。
但是重要的是整个团队要保持统一的风格,否则可能造成工作效率的低下。
试想如果有人用大驼峰去命名一个变量或方法,其他人可能会误以为那是一个直接来自类的调用的静态方法;
或是当你看到了一个全大写并且用下划线来分割的常量,你以惯性思维以为它是个常量,但实际上你的同事把它定义为一个变量,而他没有遵守大家约定的规范,那么你所调用到它的地方,可能它的值随时会发生变化,对你造成不必要的麻烦。
如果不巧的是,你所在的团队所习惯的规范与你自己的习惯有所矛盾,那要么你有足够的力量去改变所有其他人的习惯,要么就赶快改变自己的习惯,来适应团队。否则等待你的可能就是一句“你特么傻X啊搞这种命名?!”
为什么要进行url?
rl转义其实也只是为了符合url的规范而已。因为在标准的url规范中中文和很多的字符是不允许出现在url中的。
看一下php的urlencode的说明了。
urlencode — 编码 URL 字符串
string urlencode ( string $str )
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页
代表空格的符号?
空格这个符号要具体看什么编程语言了。比如在html当中那就是用" "来表示,如果在java,php或者c++当中那就是"\n"。
朋友圈被自闭症患者的画刷屏了?
今天,很多人都被这些图片刷屏了!
刚开始,这样的刷屏让人有点摸不清头脑,这是一个怎样的活动呢,相信很多网友都有一样的疑问?
这个公益活动,之所以能这么成功,首先是门槛低、也没有什么长篇大论的套路,没有任何多余环节,一元起捐。只不过,被“买”下来的画并不能带回家,而是可以保存成为手机的壁纸。
其次是孩子们的画真的很美,而他们的创作者却是一群有自闭症、脑瘫、唐氏综合症等精智障碍的特殊人群,这又恰恰戳中了人们的同情心。
所以很多网友不管三七二十一,就把钱捐了。
截止到活动结束,共募集到了15029054元善款,共有500多万人参与募捐。
这些画作再次让人们把视线投射到自闭症、脑瘫或者唐氏综合征的群体身上,但是为什么每一次,都是通过绘画、音乐等艺术媒介才会关注到自闭症群体?
这些孩子都有绘画天赋吗?
这些孩子都有艺术特长吗?
这些孩子真的只是一个个安静的美少年/美少女吗?
……据一些和这些特殊儿童经常在一起的老师称,多数画作并不是孩子们画的。他们的精细能力根本不足以完成这样的作品。
这些作品一般都是家长和老师代笔完成大部分,他们最后涂个一两下完事。其他手工作类也是一样,基本相当于用自闭症的名头给这个作品签个名罢了。
这方面的公益非常的难,多采用这种方式进行宣传,却对大众了解自闭症产生了误导。在这些动人的文字、动情的音乐、精心的策划下,人们很难想象他们身上那些影响终身的缺失,以及他们背后家庭的痛苦,过于精美的包装,会让人忽视掉他们身上真正的问题和需要解决的更实际的困难。要知道:「当你认为自闭症患者都具备某方面的『天才能力』,对大多数不具备『天才能力』的自闭症患者而言就是一种不公平。」
如果抛却这些美好的面具,展现出一个个有着社交障碍、情绪问题的孩子,对自闭症孩子的关爱该是否还能继续?
如果得知他们需要更多资源,又无法回报社会,主流的社会是否真的能接纳他们?
如果他们在公共场合的出现影响到你的生活,如果你的孩子班上也有这样一位同事的时候,你会包容他们吗?这些,似乎才是我们真正担忧的问题。
下面我们来看中外关于自闭症儿童的真实案例。
美国密歇根州夫妇特里沃·吉列(Trevor Gillett)和埃里卡·桑切斯(Erica Sanchez)与三个孩子共同生活。这个看似幸福的五口之家则因为小女儿迈克琳(Michaelynn)患有自闭症,而变得些许令人心碎。摄影师克莱·洛姆奈斯(Clay Lomneth)利用自己的业余时间拜访这家人,用相机记录下自闭症小女孩迈克琳和其父母的日常生活。
照顾小迈克琳就像是时时刻刻在照顾婴儿,日常生活中的点点滴滴都得换到某个角度才能正常进行。
埃里卡·桑切斯:“虽然小迈克琳患有自闭症,但是她会不经意间给我一个拥抱,我真的开心极了。”
三岁的小女儿从不开口说她饿了,经常被自己绊倒,又或者总是明显的心情压抑。
父亲吉列把小迈克琳抱起来,来个倒挂金钩,这是小迈克琳最喜欢的活动,也只有这样才能使小迈克琳平复心情。
迈克琳的父母表示自己的整个家庭确实受到了小女儿自闭症的影响。
在中国,摄影师郑敏用相机,在自闭症群体和社会公众之间架起一座桥梁。从2010年第一次接触自闭症群体开始,7年来拍摄了30多位“星儿”及家庭,10万多张照片,试图呈现这一群体的真实样貌,增进社会对自闭症群体的理解和支持。
阿福对爸爸的拥抱表现出本能的抗拒,和弟弟形成鲜明对比。
琪琪如今已经19岁了。当说到药物的剂量越来越大所产生的副作用时,以及琪琪日后的归宿话题时,一向以坚强乐观著称的琪妈,不禁流下了伤心的泪水,但很快她还是强压制住自己的情绪,不让其肆意宣泄。
菲菲因为自残满脸伤痕。菲菲是个刚20岁出头的女孩,但她整天在家生活不能自理,还有严重的自残举动。菲菲妈妈说:“怎么办,我真的没办法,我看不到希望,看不到尽头。不行的话我真想就跟女儿一起跳下去算了……”
与菲菲家庭认识7年,郑敏24次拍过她的照片,如果是普通人,见面一定会很有亲近感,但她完全没有。这张照片是她妈妈要离开时拍的,菲菲的眼神里没有一丝不舍和抵抗,很难解读。
浩浩因为在地铁上叫喊,乘客报警后被带到了警署。
淳淳是一个有音乐天赋的高功能星儿,他可以自主出行,自理能力和社会交往能力相对较好,经常独自在大街上游走。有一天,淳淳去了一个和他一起练琴的小女孩的学校,但保安不让他进去,那道徐徐关上的铁门,就这样硬生生地把他和他的同龄人分隔在两个不同的世界。
20岁的阿杰,1米8的个头身强力壮,情绪一发作便动手打人和撞人,无论是对他的爸爸和妈妈还是陌生人,曾多次将路人推(撞)倒,道歉赔款已成家常便饭。吓得杰爸杰妈都不敢轻易带他出门。
今日互动话题:你是因为什么原因,买下了那些画作?你身边有自闭症孩童吗?他们的真实情况是如何的?
你的每一次发声,都能让更多地人了解自闭症群体。
有翡翠、和田玉、蜜蜡、南红、小叶紫檀鉴假估价的问题,可以关注文玩讲堂,并私信我,我们会尽力回答。Python有哪些欠吐槽的地方?
Neal Krawetz有一群 geek 朋友,经常一起讨论技术话题,有时候也会谈到编程语言。「I hate Python」,作者表示。他对 Python 厌恶至极。即使有现成的 Python 代码可用,他也宁愿用 C 语言重写。为了系统地吐槽 Python,作者专门写了这篇博客,细数 Python 的「八宗罪」。
这个话题已经在 Hacker News 上引发了热烈的讨论(评论 400+),感兴趣的读者可以去围观或参与一下。
Hacker News 讨论:https://news.ycombinator.com/item?id=18706174
1. 版本
如果要安装一个默认的 Linux 操作系统,那你很有可能需要安装多个版本的 Python:Python2、Python3 甚至是 3.5、3.7。原因在于:Python3 无法与 Python2 完全兼容。甚至一些用小数表示的版本(如 3.5、3.7)也明显缺乏向后的兼容性。
我完全赞成往编程语言中添加新的功能,我甚至不介意淘汰一些旧的版本。但 Python 却要分开安装。我的 Python 3.5 代码不适用于 Python 3.7 安装版本,除非我特意将其导入 3.7。很多 Linux 开发者都觉得导出太麻烦,因此安装 Ubuntu 的时候会一并安装 Python2 和 Python3——因为有的核心功能需要前者,而有的需要后者。
向后兼容性的缺乏和各自为政的版本通常会为其敲响丧钟。Commodore 创造了第一批家用电脑(比 IBM PC 和苹果都要早很多)。但 Commodore PET 不能与后续的 Commodore CBM 兼容。CBM 又不与 VIC-20、Commodore-64、Amiga 等兼容。因此,你要么选择花很多时间将代码从一个平台导到另一个,要么选择放弃这个平台。(Commodore 今天何在?早被用户抛弃凉凉了……)
类似地,Perl 也火过一阵。但 Perl3 与 Perl2 的很多代码也不兼容。社区骂声一片,于是一些好的代码导了出来,其他的则被抛弃了。Perl4 也是如此。等 Perl5 出来的时候,人们干脆改用另一种更稳定的编程语言。如今,只有一小部分人还在频繁使用 Perl 来维持之前的项目。但已经没有人用 Perl 创建新的大项目了。
同理,Python 的每个版本也都存在谷仓效应。之前的版本还要留着,最终造成手里有一堆旧的无用 Python 代码,因为大家都不想花时间将其移到最新版上。据我所知,没有人为 Python2 创建新代码了,但我们还留着它,因为没有人想将所需代码移到 Python3.x 中。Python 2.7、3.5、3.6、3.7 的文档都还在 Python 官网上积极维护着,因为他们无法下决心弃用之前的代码。Python 就像一种僵尸编程语言——已经死掉的部分还在以行尸走肉的方式存在着。
2. 安装
很多软件包都可以帮你轻松地运行 apt、yum、rpm 或其他一些安装库,并获得最新版本的代码。但 Python 并非如此。如果用「apt-get install python」安装,你都不知道自己安的是哪个版本,它可能也无法与你所需的所有代码兼容。
因此,你要安装你需要的那版 Python。我的其中一个项目用到 Python,但必须用 Python3.5。所以最后,我的电脑安装了 Python2、Python2.6、Python3 及 Python3.5。其中两个来自操作系统,一个用于项目,另外一个服务于出于其他原因安装的无关软件。虽然都是 Python,但此 Python 非彼 Python。
如果你想安装 Python 包,你应该使用「pip」(Pip Installs Packages)。但由于系统上有一堆 Python,你要注意使用正确版本的 pip。否则,「pip」可能运行「pip2」,而不是你需要的「pip3.7」。(如果名称不存在,你需要为 pip3.7 指定明确的真实路径)
一位队友建议我配置自己的环境,这样的话每种软件都可以使用 Python3.5 的 base 环境。在我需要用 Python3.6 开展另一个项目之前,这种做法是非常行得通的,但是需要 Python 3.6 就得创建另外一个环境。两个项目,两版 Python,一点都不会混,真的(用生命在假笑)。
pip 安装程序将文件放置在用户的本地目录。安装系统级的库时不用 pip。Gawd 不允许你在运行「sudo pip」时出错,因为那会毁了你的整个电脑!运行 sudo 可能会使一些软件包在系统级别安装,有些是为错误版本的 Python 安装的,而你的主目录中的一些文件可能最终归 root 所有,因此未来的非 sudo pip 安装可能会因权限问题而失败。不要这样做。
这些 pip 模块由谁来维护呢?当然是社区。也就是说,没有明确的所有者,也没有强制性的来源链或责任链。今年早些时候,PyPI 的一个版本中发现了一个窃取 SSH 凭证的后门。这也是意料之中。(出于同样的原因,我不用 Node.js 和 npm;我不信任他们的社区项目。)
3. 句法
我非常主张代码的可读性要强。乍一看,Python 的可读性似乎不错。但当你开始创建大型代码库的时候你就不会这么想了。
大多数编程语言使用某种符号来标识范围——函数的开始和结束位置、条件语句中包含的操作、变量的定义范围等。C 语言、Java、JavaScript、Perl 和 PHP 都用 {...} 来定义范围,Lisp 使用 (...)。Python 呢?它用空格!如果你要定义复杂代码的范围,你可以缩进接下来的几行代码,缩进结束时,该范围也截止。
Python 手册说,你可以用任意数量的空格或制表符来定义范围。但是,每次缩进最好使用四个空格!如果你想缩进两次进行嵌套,使用八个空格!Python 社区已经对此进行标准化,即使 Python 手册中并没有明文规定。这个社区就喜欢用四个空格。所以,除非你不打算将自己的代码向任何人展示,否则的话每次缩进最好用四个空格。
我第一次看到 Python 代码时,觉得用缩进来定义范围还挺好的,但这么做有一个巨大的缺陷。你可以进行深度嵌套,但这么做使得每一行都会很长,导致不得不在文本编辑器中换行。较长的函数和条件语句可能会使开始和结束范围很难匹配。而且当你不小心把三个空格当成四个空格,还容易出现计算错误,进而花几个小时来调试和追踪。
对于其它语言,我已经养成了调试代码不带任何缩进的习惯。这样,我可以快速浏览代码,然后轻松地识别和删除调试代码。但 Python 呢?任何没有适当缩进的代码都会产生缩进错误。
4. includes
大部分编程语言都有办法导入其它代码块。比如,C 语言用「#include」,PHP 语言可以用「include、include_once、require、require」。而 Python 用的是「import」。
Python 可以导入整个模块、模块的一部分或模块中的特定函数。C 语言?你可以查看「/usr/include/」。Python 的话,最好用「python -v」列出所有路径,然后从列表中搜索每个目录和子目录中的每个文件。我有些朋友很喜欢 Python,但我看到他们想导入东西时,总得浏览标准模块。
导入功能还允许用户重命名导入的代码。它们基本上定义了一个自定义的命名空间。乍一看,你会觉得挺不错的,但这最终会影响可读性和长期支持。重命名对于较小的脚本来说还是不错的,但对于长期项目来说真的不适用。那些使用 1-2 个字母作为命名空间(比如「import numpy as n」),而且还不按约定俗成的方式来命名的,简直应该拉出去枪毙!
这还不是最糟糕的。大部分编程语言 include 代码的时候就只是导入代码而已。如果有一个带有构造函数的全局对象,有些语言,如面向对象的 C++可能会执行代码。类似地,有些 PHP 代码可能会定义全局变量,所以导入可以运行代码——但这种做法通常被认为很糟糕。相比之下,很多 Python 模块包含在导入期间运行的初始化函数。你不知道在运行的是什么,它要干什么,你甚至可能不会注意到。除非存在命名空间冲突,如果这样就好玩了,你得花很多时间来寻找原因。
5. 命名法
在其它语言中,数组(array)直接称之为'arrays',但是在 Python 中,它们被称为 'lists'。关联数组在某些地方被称为 'hash' (Perl),但是 Python 将其称为「字典」(dictionary)。Python 似乎完全按照自己的节奏来,不使用计算机科学和信息科学领域的常见术语。
此外,Python 库的命名也有问题。PyPy、PyPi、NumPy、SciPy、SymPy、PyGtk、Pyglet、PyGame……(前两个库的发音一样,但是它们的功能完全不同)。我理解「py」表示 Python,但是它们就不能统一出现在前面或后面吗?
一些常见库放弃了类似双关语的「Py」命名约定,包括 matplotlib、nose、Pillow和 SQLAlchemy。虽然有一些命名可能暗示其目的(如 SQLAlchemy 包含 SQL,所以它可能是一个 SQL 接口),但是其它的可能只是随机的单词。如果你不知道「BeautifulSoup」这个库是干什么的,那么你能从命名看出来它是一个 HTML/XML 解析器吗?不过,BeautifulSoup 有很完善的文档且易于使用,如果每一个 Python 模块都这样,我也就不抱怨了,但是大多数 Python 库的文档非常烂。
总的来说,我认为 Python 是一个具有不一致命名约定的函数库集合。我经常抱怨开源项目的命名非常可怕。除非你知道这些项目在干什么,否则你从命名本身中什么都看不出来。除非你知道在寻找什么样的库,不然只能通过别人偶然提及的名字或偶然的机会发现一些库。大多数 Python 库加重了这种现象,也加重了 Python 的负面体验。
6. 奇怪的操作
每种语言都有自己比较奇特的操作。C 语言中使用 & 和 * 获取地址空间和值的命名法非常奇怪。C 语言中还有用 ++ 和—实现 increment/decrement 的捷径。Bash 语言中,在引用特定字符(如用于正则表达式的圆括号和句号)时需要一直考虑「什么时候使用转义符 (\)」。JavaScript 兼容性有问题(并非每个浏览器都支持所有有用的功能)。但 Python 的奇怪操作比我见过的其他语言都多。如:
在 C 语言中,双引号里的是字符串,单引号里的是字符。
在 PHP 和 Bash 中,两种引号都能包含字符串。但是,双引号里的字符串可以嵌入变量。相比之下,单引号的字符串是文字;任何嵌入的类似变量的名称都不可扩展。
在 JavaScript 中,单引号和双引号没什么区别。
在 Python 中,单引号和双引号也没有什么区别。但是,如果你想让字符串跨行,就得用三重引号,如"""string""" 或 '''string'''。如果你想用二进制,那你需要优先选择带有 b(b'binary')或 r(r'raw')的字符串。有时你要用 str(string) 把字符串转换为字符串,或使用 string.encode('utf-8') 将其转换为 utf8 格式。
如果你一开始认为 PHP 和 JavaScript 中的=、==、===有点奇怪,那等你用 Python 中的引号时可能不会这么想了。
7. 通过对象 Reference 传递
大多数编程语言的函数参数传递是传值。如果函数改变了值,结果不会传递回调用代码。但正如我解释过的,Python 偏偏要有所不同。Python 默认使用 pass-by-object-reference 来传递函数参数。这意味着改变源变量可能最终会改变值。
这是面向程序、函数和对象的编程语言之间的最大区别。如果每个变量都由对象引用来传递,并且变量的任何变化都会改变所有的引用,那你可能使用的都是全局对象。通过不同的命名调用相同的对象不会改变对象,所以实际上它就是全局的。此外,正如 C 的程序员早就学到的,全局变量太恶心了,别用。
在 Python 中,你必须通过值来传递变量,例如「a=b」只是给相同的对象空间分配了另一个命名,但并没有复制 b 的值给 a。如果你真的想要复制 b 的值,你需要使用一个 copy 函数,通常是「a=b.copy()"的形式。然而,注意我说的是「通常」。不是所有数据类型都有一个「copy」原型,或者 copy 函数可能是不完整的。在这种情况下,你可以使用单独的「copy」库:"a=copy.deepcopy(b)"。
8. 本地命名
用所用的库或函数的名字来命名程序是常见的编程技巧。例如,如果我用一个叫做「libscreencapture.so」的 C 库来测试一个截屏程序,我会将该程序命名为「screencapture.c」并编译为「screencapture.exe」。
gcc -o screencapture.exe screencapture.c -lscreencapture
在 C、Java、JavaScript、Perl、PHP 等语言中,这通常很有效,因为这些语言可以轻易地辨别本地程序和资源库,它们有不同的路径。但 Python 呢?还是算了吧,千万别这样做。为什么?Python 会假定你首先要导入本地代码。如果我有一个名为「screencapture.py」的程序使用了「import screencapture」,那么它将导入自己而不是系统库。至少,你应该调用本地程序「myscreencapture.py」吧。
并非一无是处
Python 是一门非常流行的编程语言,有很多粉丝。甚至我的很多朋友都很喜欢 Python。多年来,我和他们讨论过这些问题,每次他们都点头表示同意。他们并不反对 Python 存在这些问题,只是认为这不足以浇灭他们对这种语言的热情。
我的朋友经常提到那些非常酷的 Python 库。我同意一些库非常有用。例如,BeautifulSoup 是我用过最好的 HTML 解析器之一,NumPy 使多维数组和复杂的数学更容易实现,而 TensorFlow 对于机器学习非常有用。但是,我不会因为喜欢 TensorFlow 或 SciPy 而用 Python 创建单片程序。我不打算为了这些「蝇头小利」而放弃可读性和可维护性,这不值得。
通常当我写一篇关于某个主题的批评时,我也会尝试写一些积极的东西。但我没办法列出关于 Python 的好的方面,因为我真的认为 Python 很糟糕。