小编Bri*_*ian的帖子

工作中的PHP编码标准:疯了,还是我?

我更喜欢编码标准是合乎逻辑的.这是我为什么以下一套标准没有的论点.

我需要知道以下两件事之一:(1)为什么我错了,或者(2)如何说服我的团队改变它们.


camelCase:函数,类名,方法和变量必须是camelCase.

  • 难以区分变量和类
  • 针对PHP的小写/下划线变量/函数和UpperCamelCase类

例:

$customerServiceBillingInstance = new customerServiceBillingInstance(); // theirs
$customer_service_billing_instance = new CustomerServiceBillingInstance();
Run Code Online (Sandbox Code Playgroud)


函数/方法必须始终返回一个值(并且必须始终存储返回的值).

这出现在我们的数百个php页面上:

$equipmentList = new equipmentList();
$success = $equipmentList->loadFromDatabase(true, '');
$success = $equipmentList->setCustomerList();
$success = $equipmentList->setServerList();
$success = $equipmentList->setObjectList();
$success = $equipmentList->setOwnerList();
$success = $equipmentList->setAccessList();
Run Code Online (Sandbox Code Playgroud)

返回值很少使用,但始终存储.它鼓励使用复制粘贴.


没有静态方法

类似下面的行在代码库中出现了数千次:

$equipmentList = new equipmentList();
$success = $equipmentList->loadFromDatabase();
Run Code Online (Sandbox Code Playgroud)

我会比较喜欢:

$equipmentList = equipmentList::load();
Run Code Online (Sandbox Code Playgroud)

有什么理由不使用静态方法或属性?不是静态方法负责非特定于实例的逻辑吗?像初始化或填充新实例一样?


除非一切都返回一个对象,否则您的代码不是OOP

有一段代码执行查询,检查几种错误方式,然后处理生成的数组.它被重复(复制+粘贴)几次,所以我把它放在基类中.然后我被告知返回一个数组不是OOP.


你如何捍卫这些做法?我真的需要知道.我觉得我正在服用疯狂的药片.

如果你不能为他们辩护,你如何说服他们需要改变的坚定作者?

php oop coding-style naming-conventions

23
推荐指数
3
解决办法
2542
查看次数

在c ++中用空格拆分字符串

可能重复:
C++:如何拆分字符串?
分裂一个字符串

在c ++中用空格分割字符串的最佳方法是什么?

我希望能够根据制表符,空格等拆分它,当然也可以忽略多个制表符/空格/等.连续,并没有在最后有这些事情的问题.

最后,我最终将它存储在一个向量中,但如果有一些简单的内置标准库分割方法,我可以轻松地在数据类型之间进行转换.

我在使用g ++的UNIX机器上构建它,而不是使用Microsoft Visual C++

c++ string

15
推荐指数
3
解决办法
4万
查看次数

从App_Code文件夹中的类访问App_Data中的文件

在ASP.Net中有app_data文件夹,用户无法通过网络访问该文件夹.我想在此文件夹中存储一个文件,并使用App_Code文件夹中的类从该文件中读取.

请记住,此处的当前工作目录将是一个目录,例如"c:\","c:\ windows\system32 \"等,而不是应用程序目录.所以像"../App_Data/somefile"这样的东西不起作用.

必须有一些简单的东西,我忽略了如何以编程方式访问App_Data文件夹中的文件

我怎样才能做到这一点?

asp.net

11
推荐指数
2
解决办法
3万
查看次数

首先按长度排序数组,然后按字母顺序排序

如何按长度排序数组,然后按字母顺序排序?

我有一个带有数字的东西列表,我现在得到:

Something1 Something10 Something2 Something3

虽然我想得到:

Something1 Something2 Something3 Something10

java arrays sorting

9
推荐指数
2
解决办法
1万
查看次数

查看对象是否是通过字符串传递的类的实例

我想必须有一些方法来使用反射来做我想做的事情.

我需要能够在运行时获取某个类的字符串,例如:

string s = "mypackage.MySuperClass"
Run Code Online (Sandbox Code Playgroud)

然后我可能有某种类型的对象.它可能是以下之一:

mypackage.MySuperClass obj = new mypackage.MySuperClass();
Run Code Online (Sandbox Code Playgroud)

要么

mypackage.MySubClass obj2 = new mypackage.MySubClass();
Run Code Online (Sandbox Code Playgroud)

要么

someotherpackage.SomeOtherClass obj3 = new someotherpackage.SomeOtherClass();
Run Code Online (Sandbox Code Playgroud)

我需要做的是查看一个对象(它的类型是在运行时确定的)是否等于字符串s(它也是在运行时通过完全不同的方式确定的).

在上面的例子中,我希望obj和obj2与s的类型相同(因为MySubClass是MySuperClass的子类),obj3不会.

在java中有一种简单的方法吗?可能是使用instanceOf的东西?

java reflection

4
推荐指数
1
解决办法
2947
查看次数

从PHP中的构造函数调用另一个构造函数

我想在PHP类中定义一些构造函数.但是,我的构造函数代码目前非常相似.如果可能的话,我宁愿不重复代码.有没有办法从php类中的一个构造函数中调用其他构造函数?有没有办法在PHP类中有多个构造函数?

function __construct($service, $action)
{
    if(empty($service) || empty($action))
    {
        throw new Exception("Both service and action must have a value");
    }
    $this->$mService = $service;
    $this->$mAction = $action;

    $this->$mHasSecurity = false;
}
function __construct($service, $action, $security)
    {
        __construct($service, $action); // This is what I want to be able to do, so I don't have to repeat code

        if(!empty($security))
        {
            $this->$mHasSecurity = true;
            $this->$mSecurity = $security;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过创建一些Init方法来解决这个问题.但有没有办法绕过这个?

php constructor multiple-constructors

3
推荐指数
1
解决办法
5036
查看次数

PHP中的位操作和MySQL检索

我试图优化我的mysql表一点点,以便有一个稍微更易于管理的表.我想将用户权限存储在位字段中.

例如,用户权限可能是0110(我的用户权限越来越多,所以这个长度可能会长一些)

该示例可能对应于以下内容:

0:用户无法在网站上发布新闻1:用户可以在网站上发布新文章1:用户可以编辑网站上的任何文章0:用户无法从网站上删除文章等(其他权限)

如果我将它存储在mysql位字段中.我怎样才能在PHP中操作它?

例如,在PHP中有一种简单的方法来获取第3位并查看它是0还是1?

有没有一种简单的方法可以将第3位设置为0或1?

php mysql

3
推荐指数
2
解决办法
1387
查看次数

ASP .net应用程序中的旧版HTML表单

我有一个html页面,我正在转换为asp .net页面.此页面包含一个访问我无法控制的外部网站的表单.下面有一些示例代码:

<asp:Content ID="sample" ContentPlaceHolderID="body" Runat="Server">
<form name="Subscribe" method="post" action="http://anexternalwebsitehere.com/subscribe.asp">
        <input type="text" name="email" size="45" maxlength="120" />
        <input type="submit" name="submit" value="Subscribe" />
    </form>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)

表单比我提供的示例更复杂,但它大致了解了我需要转换的内容.这是我遇到的问题.

如果我按原样保留: 当您单击提交按钮时,您将回发到当前页面而不是外部页面

如果简单地将所有内容转换为asp表单控件并更改回发网址: id会变成一些令人费解的"ctl00_body_ctl00",外部页面无法解释.

注意:我确实需要该页面是一个aspx页面,因为我在页面上使用其他内容的母版页.

附加说明:这不是Microsoft MVC.

我错过了什么?

asp.net xhtml

2
推荐指数
1
解决办法
1565
查看次数

Selenium RC WaitForPageToLoad挂起

我正在努力让Selenium RC启动并运行在我的网站上进行一些自动化测试.我发现我一直想验证我没有破坏任何功能,手动测试开始变得无聊.

但是,我似乎无法让Selenium RC与WaitForPageToLoad一起使用.

我尝试复制他们在selenium文档中给出的基本示例,但测试总是卡在:$ this-> waitForPageToLoad("30000"); 我可以看到它在窗口中显示的距离很远,并且页面似乎已正确加载(我们在谷歌搜索结果页面).但测试失败并超时.

require_once 'PHPUnit/Extensions/SeleniumTestCase.php';

/**
 * Description of Test
 *
 * @author brian
 */
class Test extends PHPUnit_Extensions_SeleniumTestCase {

    function setUp() {
        $this->setBrowser("*safari");
        $this->setBrowserUrl("http://www.google.com/");
    }

    function testMyTestCase() {
        $this->open("/");
    $this->type("q", "selenium rc");
    $this->click("btnG");
    $this->waitForPageToLoad("30000");
    $this->assertTrue($this->isTextPresent("Results * for selenium rc"));
    }
}
Run Code Online (Sandbox Code Playgroud)

更有趣的是,如果我在等待时刷新页面,一切都会按预期继续.因此看起来似乎waitForPageToLoad没有意识到页面已经加载.

php selenium selenium-rc

1
推荐指数
1
解决办法
3017
查看次数