我们目前正在优化一个MySQL表(InnoDB),它甚至会有超过1亿行.
在一列中,我们存储IP地址(VARCHAR 45).我们需要在此列上放置一个索引,因为我们必须能够检索每个特定IP地址的所有行.
但是,所有行的70%不会存储IP地址(空).
我们的问题:我们应该将这些空值存储为NULL,从而在此列上允许NULL(将为每一行添加1个字节).或者我们不应该允许NULL并将那些空值存储为''(空字符串)?
什么是最佳表现?
我们永远不必搜索空(='')或空(IS NULL)的行,只搜索特定的IP地址(='123.456.789.123').
更新:在SO上确实有很多问题可以解决类似的问题.然而,一些答案似乎是矛盾的或说"它取决于".我们将运行一些测试并在此处针对我们的具体方案发布我们的发现.
我们有对象实现__toString():
class Foo {
public function __toString()
{
return 'bar';
}
}
Run Code Online (Sandbox Code Playgroud)
然后我们有返回string或实现的对象的函数__toString(),就像上面的例子。
string对字符串使用返回类型当然有效:
function getString():string {
return 'Works!';
}
Run Code Online (Sandbox Code Playgroud)
返回类型的对象Foo不起作用,因为它不是string:
function getString(Foo $foo):string {
return $foo; // Fatal TypeError!
}
Run Code Online (Sandbox Code Playgroud)
是否有任何 PHP 接口可以用来键入提示string和实现该未知接口的对象,例如Printableor Stringable(lol)?
目标是能够返回string实现特定接口的 或 对象(这将强制实现__toString)。
我们有这样的DOM:
<div class="outer">
<div class="inner"> <!--// No "copyright" in this node //-->
<div class="content">...</div>
</div>
<div class="inner">
<div class="content">...</div>
<div class="copyright">...</div> <!--// DISPLAY THIS ONE //-->
</div>
<div class="inner">
<div class="content">...</div>
<div class="content">...</div>
<div class="content">...</div>
<div class="copyright">...</div> <!--// Hide this one //-->
</div>
<div class="inner">
<div class="content">...</div>
<div class="content">...</div>
<div class="copyright">...</div> <!--// Hide this one too, etc. //-->
</div>
<!--// etc. //-->
</div>
Run Code Online (Sandbox Code Playgroud)
必须隐藏所有具有"版权"类别的元素,但第一个元素除外.
我们尝试应用这种方法,但遗憾的是没有成功.它必须是仅CSS的解决方案.任何的想法?
谢谢你的帮助!
我对OOP很新,并且有一个普遍的问题.
想象一下,我有两个课程:AddressBook和Contact.地址簿包含0-n个联系人.
你会把方法放在哪里getAllContactsFromAddressBook()?
class AddressBook {
private $addressBookId;
function __construct($addressBookId) {
$this->addressBookId = $addressBookId;
}
// HERE?
// getAllContactsFromAddressBook() { ... }
}
Run Code Online (Sandbox Code Playgroud)
和
class Contact {
private $contactId;
function __construct($contactId) {
$this->contactId = $contactId;
}
function getContactDetails($contactId) { ... }
// OR BETTER HERE?
// getAllContactsFromAddressBook($addressBookId) { ... }
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,最佳做法是什么?谢谢你的解释!
php ×2
css ×1
indexing ×1
interface ×1
mysql ×1
null ×1
oop ×1
performance ×1
php-7 ×1
type-hinting ×1