我将尝试使用这个问题的格式,我非常愿意接受有关更好的方法来处理它的建议.
我不想只是在问题中转储一堆代码,所以我已经发布了该类的代码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) 好的,我花了3天时间试图找出这里发生了什么,我很难过.
该网站使用CI构建.(http://horizoneslchina.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和上面的函数之前把它作为问题抛弃了.
有没有人对此有任何想法?
想象一下,您正在使用的对象具有与其关联的其他对象的集合,例如,WinForm上的Controls集合.您想要检查集合中的某个对象,但该集合没有Contains()方法.有几种方法可以解决这个问题.
Contains()通过循环遍历集合中的所有项来实现您自己的方法,以查看其中一个是否是您正在寻找的.这似乎是"最佳实践"方法.Run Code Online (Sandbox Code Playgroud)try { Object aObject = myCollection[myObject]; } catch(Exception e) { //if this is thrown, then the object doesn't exist in the collection }
我的问题是你认为第二种选择的编程习惯有多差,为什么?它的性能与集合中的循环相比如何?
这是关于在WordPress中实现的MySQL的一个非常具体的问题.
我正在尝试开发一个插件,它会显示(选择)具有特定" 标签 "且属于特定" 类别 "(多个)的帖子
我被告知这是不可能的,因为存储类别和标签的方式:
wp_posts 包含帖子列表,每个帖子都有一个"ID" wp_terms包含术语列表(包括类别和标签).每个术语都有一个TERM_IDwp_term_taxonomy 有一个带有TERM_ID的术语列表,并且每个术语都有一个分类法定义(类别或标记)wp_term_relationships 条款和职位之间有关联 我如何加入表格以获得所有带有"核" 和 "交易" 标签的帖子,这些标签也属于"Category1"类别?
在我的(PHP)Web应用程序中,我的网站的一部分保留了最近搜索的历史记录.最近的查询显示在旁边框中.如果查询文本太长,我会截断它并显示省略号.例如:"我很长的疑问是......"
目前,我在一定数量的字符后截断.由于字体不是单字型,因此对所有I的查询比对所有W的查询更窄.我希望它们在椭圆之前都具有相同的宽度.有没有办法获得结果字符串的近似宽度,以便任何给定字符串的椭圆将从一开始就出现大约相同的像素数?CSS有办法吗?PHP?这会更好地由JavaScript处理吗?
有几个类似的问题,但我会把它混合在一起.
基本上,我有一个timestamp列(这是一个int),我的一个更新只是更新这个时间戳列,有时它几乎没有明显的距离.例如,它可能会从1316631442更改为1316631877.两者之间并没有太大区别.
所以记录正在更新,我可以在查询运行之前检查phpMyAdmin,然后查看差异.但是,我正在对受影响的行计数执行var_dump()并保持为0.
如果我同时将另一列更新为其他值,则受影响的行为1.
那么触发行受影响需要什么?即使它因为更新成功而受到影响.
此外,我正在使用Laravel PHP框架及其查询构建器.目前在那里做一些调试,看看是否有什么东西可能关闭,但到目前为止似乎都很好.
编辑:对不起我错误输入了以上内容.当我完全更改另一列的值时,受影响的行为1,而不是0.
我试图了解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) 如果您不熟悉内部结构,如何确定PHP代码的性能影响?有没有办法弄清楚你的代码是如何执行的(除了简单地加载测试)?我正在寻找内存使用,算法执行时间等内容.
也许乔尔会说,"学习C,然后阅读内部",但我现在没有时间学习C(尽管我很乐意,实际上).