小编Ija*_*een的帖子

这是处理PHP类中的getter/setter的合理方法吗?

我将尝试使用这个问题的格式,我非常愿意接受有关更好的方法来处理它的建议.

我不想只是在问题中转储一堆代码,所以我已经发布了该类的代码refactormycode.

基类,便于类属性处理

我的想法是人们可以在这里发布代码片段或进行更改refactormycode并将链接发布回他们的重构.基于此,我会做出投票并接受答案(假设有一个明确的"赢家").

无论如何,对班级本身:

我看到很多关于getter/setter类方法的争论,最好是直接访问简单的属性变量,还是每个类都定义了明确的get/set方法,等等等等等等.我喜欢使用显式方法的想法,以防您以后需要添加更多逻辑.然后,您不必修改使用该类的任何代码.但是我讨厌有一百万个看起来像这样的函数:

public function getFirstName()
{
   return $this->firstName;
}
public function setFirstName($firstName)
{
   return $this->firstName;
}
Run Code Online (Sandbox Code Playgroud)

现在我确定我不是第一个这样做的人(我希望有一个更好的方法可以让别人向我建议).

基本上,PropertyHandler类有一个__call魔术方法.通过__call以"get"或"set"开头的任何方法然后被路由到将值设置或检索到关联数组的函数.获取或设置后,数组中的键是调用方法的名称.因此,如果进入__call的方法是"getFirstName",则数组键是"FirstName".

我喜欢使用__call,因为它会自动处理子类已经定义了"getFirstName"方法的情况.我的印象(我可能错了)是__get和__set魔术方法不这样做.

所以这是一个如何工作的例子:

class PropTest extends PropertyHandler
{
    public function __construct()
    {
        parent::__construct();
    }
}

$props = new PropTest();

$props->setFirstName("Mark");
echo $props->getFirstName();
Run Code Online (Sandbox Code Playgroud)

请注意,PropTest实际上没有"setFirstName"或"getFirstName"方法,PropertyHandler也没有.所有这一切都是在操纵数组值.

另一种情况是你的子类已经扩展了其他东西.由于PHP中不能具有真正的多重继承,因此可以使子类具有PropertyHandler实例作为私有变量.您必须再添加一个函数,但事情的行为方式完全相同.

class PropTest2
{
    private $props;

    public function __construct()
    {
        $this->props = new PropertyHandler();
    }

    public function __call($method, $arguments)
    {
        return $this->props->__call($method, $arguments);
    }
}

$props2 = new PropTest2();

$props2->setFirstName('Mark');
echo $props2->getFirstName(); …
Run Code Online (Sandbox Code Playgroud)

php oop

8
推荐指数
2
解决办法
3156
查看次数

CodeIgniter会话仅在中国失败

好的,我花了3天时间试图找出这里发生了什么,我很难过.

该网站使用CI构建.(http://horizo​​neslchina.com)

有一段时间,无论何时在中国,我都会得到不允许的关键人物.

我使用以下内容扩展了核心Input类:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 
class MY_Input extends CI_Input {

    function _clean_input_keys($str)
    {
        $config=&get_config('config');
        if(!preg_match("/^[".$config['permitted_uri_chars']."]+$/i",rawurlencode($str)))
        {
            exit('Disallowed Key Characters. '.$str);
        }

        //CleanUTF-8ifsupported
        if(UTF8_ENABLED===TRUE)
        {
            $str=$this->uni->clean_string($str);
        }

        return $str;

    }


}
/* End of file My_Input.php */
Run Code Online (Sandbox Code Playgroud)

它似乎解决了这个问题,但现在我的情况是没有一个会话将保持不变.当中国某人登录并尝试访问任何安全页面时,它会立即终止会话.

这在澳大利亚不会发生,在印度也不会发生.我能找到的唯一区别是在中文系统上,逗号放在会话名称前面.EG,_ci_session和上面的函数之前把它作为问题抛弃了.

有没有人对此有任何想法?

php session codeigniter codeigniter-url

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

使用未处理的异常而不是Contains()?

想象一下,您正在使用的对象具有与其关联的其他对象的集合,例如,WinForm上的Controls集合.您想要检查集合中的某个对象,但该集合没有Contains()方法.有几种方法可以解决这个问题.

  • Contains()通过循环遍历集合中的所有项来实现您自己的方法,以查看其中一个是否是您正在寻找的.这似乎是"最佳实践"方法.
  • 我最近遇到了一些代码,而不是循环,尝试访问try语句中的对象,如下所示:
try  
{  
    Object aObject = myCollection[myObject];  
}  
catch(Exception e)  
{  
    //if this is thrown, then the object doesn't exist in the collection
}
Run Code Online (Sandbox Code Playgroud)

我的问题是你认为第二种选择的编程习惯有多差,为什么?它的性能与集合中的循环相比如何?

.net c# error-handling

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

如何在WordPress中选择具有特定标签/类别的帖子

这是关于在WordPress中实现的MySQL的一个非常具体的问题.

我正在尝试开发一个插件,它会显示(选择)具有特定" 标签 "且属于特定" 类别 "(多个)的帖子

我被告知这是不可能的,因为存储类别和标签的方式:

  1. wp_posts 包含帖子列表,每个帖子都有一个"ID"
  2. wp_terms包含术语列表(包括类别和标签).每个术语都有一个TERM_ID
  3. wp_term_taxonomy 有一个带有TERM_ID的术语列表,并且每个术语都有一个分类法定义(类别或标记)
  4. wp_term_relationships 条款和职位之间有关联

我如何加入表格以获得所有带有"核" "交易" 标签的帖子,这些标签也属于"Category1"类别?

php mysql sql wordpress plugins

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

通过webapp确定打印字符串的宽度

在我的(PHP)Web应用程序中,我的网站的一部分保留了最近搜索的历史记录.最近的查询显示在旁边框中.如果查询文本太长,我会截断它并显示省略号.例如:"我很长的疑问是......"

目前,我在一定数量的字符后截断.由于字体不是单字型,因此对所有I的查询比对所有W的查询更窄.我希望它们在椭圆之前都具有相同的宽度.有没有办法获得结果字符串的近似宽度,以便任何给定字符串的椭圆将从一开始就出现大约相同的像素数?CSS有办法吗?PHP?这会更好地由JavaScript处理吗?

javascript css php

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

MySQL时间戳记录正在更新但受影响的行仍为0

有几个类似的问题,但我会把它混合在一起.

基本上,我有一个timestamp列(这是一个int),我的一个更新只是更新这个时间戳列,有时它几乎没有明显的距离.例如,它可能会从1316631442更改为1316631877.两者之间并没有太大区别.

所以记录正在更新,我可以在查询运行之前检查phpMyAdmin,然后查看差异.但是,我正在对受影响的行计数执行var_dump()并保持为0.

如果我同时将另一列更新为其他值,则受影响的行为1.

那么触发行受影响需要什么?即使它因为更新成功而受到影响.

此外,我正在使用Laravel PHP框架及其查询构建器.目前在那里做一些调试,看看是否有什么东西可能关闭,但到目前为止似乎都很好.

编辑:对不起我错误输入了以上内容.当我完全更改另一列的值时,受影响的行为1,而不是0.

php mysql pdo timestamp laravel

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

如何通过代码生成WPF控件

我试图了解XAML,并认为我会尝试编写一些代码.

尝试添加具有6乘6列定义的网格,然后将文本块添加到其中一个网格单元格中.我似乎无法引用我想要的细胞.网格上没有方法可以添加文本块.只有grid.children.add(对象),没有Cell定义.

XAML:

<Page x:Class="WPF_Tester.Page1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Page1"
    Loaded="Page_Loaded">

</Page>
Run Code Online (Sandbox Code Playgroud)

C#:

private void Page_Loaded(object sender, RoutedEventArgs e)
{
    //create the structure
    Grid g = new Grid();
    g.ShowGridLines = true;
    g.Visibility = Visibility.Visible;

    //add columns
    for (int i = 0; i < 6; ++i)
    {
        ColumnDefinition cd = new ColumnDefinition();
        cd.Name = "Column" + i.ToString();

        g.ColumnDefinitions.Add(cd);
    }
    //add rows
    for (int i = 0; i < 6; ++i)
    {
        RowDefinition rd = new RowDefinition();
        rd.Name = "Row" + i.ToString();

        g.RowDefinitions.Add(rd);
    } …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf xaml

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

您推荐哪些用于自动生成JSON的PL/SQL库?

您是否使用过JSON的PL/SQL库,并且发现它们有用吗?

PL/SQL中,我不得不繁琐地手工编写JSON值返回JavaScript函数的代码.我发现了一个用于自动生成JSON的PL/SQL库,但它并没有完全满足我所需要的一切.例如,我无法扩展库中的基本函数以返回我正在使用的JavaScript树组件所需的复杂的树状JSON数据结构.

注意:
该系统已经生产了8年以上,其架构使用PL/SQL作为CRUD和大多数业务逻辑.PL/SQL还使用mod PL/SQL生成90%的表示层(HTML/JavaScript).另外10%是通过Oracle Reports Builder完成的报告数据.

json plsql

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

如何在Symfony PHP中生成友好的URL?

我总是倾向于忘记这些内置的Symfony函数来建立链接.

php url seo symfony1

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

确定PHP代码的性能结果

如果您不熟悉内部结构,如何确定PHP代码的性能影响?有没有办法弄清楚你的代码是如何执行的(除了简单地加载测试)?我正在寻找内存使用,算法执行时间等内容.

也许乔尔会说,"学习C,然后阅读内部",但我现在没有时间学习C(尽管我很乐意,实际上).

php performance

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