比方说,我有一个抽象类饮料,以及选择的饮料(葡萄酒,啤酒等)的类型在运行时创建的工厂方法.
每个饮料都需要一些参数来正确初始化自己.其中一些是所有饮料的共同点; 例如,他们可能都需要DrinkConfig参数.
但每种饮料也可能有其独特的要求.也许Wine需要一个Sommelier辅助对象来初始化自己.啤酒不需要它,但它可能需要它自己的辅助对象.
那么我应该将什么传递给工厂方法呢?当我调用它时,我有所有可用的辅助对象,所以我可以将它们全部传递给工厂.但这最终可能会引发很多争论.有没有更好的方法来设计它?
编辑:我们假设我不能在工厂中创建辅助对象; 他们只能从来电者处获得.
我正在关注“使用堆快照发现分离的 DOM 树内存泄漏”下的本教程。
当我搜索分离的节点时,我看到一堆“分离”元素。但是当我展开它们时,所包含的元素都不是红色或黄色的,如教程中所述。
这种行为改变了吗?我在 Mac 上使用 70.0.3538.77。
是否有任何工具可以列出PHP文件使用的类的名称?
例如,如果我在此文件上运行它:
<?
class Test {
public function __construct(Obj1 $x) {
$y = new Obj2();
$str = "Obj3";
$z = new $str();
}
}
?>
Run Code Online (Sandbox Code Playgroud)
它会报告"Obj1"和"Obj2".如果它真的很聪明,它也可能会报告"Obj3",但这并不重要.
我正在尝试打包一些代码,我想要一些帮助确保我没有错过任何依赖项.
有一种称为PHP_Depend的东西,它可以绘制依赖项的数量,但不能报告它们是什么.
更新:我没有找到真正的解决方案,但我想出了一些足够接近我的目的.您可以对文件进行标记,并搜索所有T_STRING标记.这将为您提供文件中提到的所有类名.它还会为您提供其他功能,如函数名称和常量.但如果您的类名易于区分(例如,他们有初始上限),那么这应该不是问题.
$contents = file_get_contents($path);
$tokens = token_get_all($contents);
foreach ($tokens as $token) {
if (is_array($token) && $token[0] === T_STRING) {
echo $token[1]."\n";
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个CSS样式表,它在服务器上动态创建,并通过<link>标签返回.是否可以使用此样式表返回任何元数据,我可以使用JavaScript阅读?
(用例:我返回的样式表是几个较小的样式表.我希望我的JavaScript代码能够检测出哪些较小的代码.)
我考虑过向元素添加一些自定义属性:
body {
-my-custom-prop1:0;
-my-custom-prop2:0;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试阅读这些时:
window.getComputedStyle(document.body)['-my-custom-prop1']
Run Code Online (Sandbox Code Playgroud)
他们没有回来.还有其他想法吗?
编辑:我最终采取了略微不同的方法.<link>我没有添加标签,而是制作了一个AJAX请求来获取样式表,并将其文本添加到<style>标签中.这样我就可以使用HTTP响应头来包含元数据.当然,这不会像跨<link>标签一样跨域工作.
使用CSS,有没有办法选择与某个选择器匹配的元素最近的后代?
<div class="foo"> <!-- if we're inside this -->
<div>
<br />
<div class="bar"> <!-- match this -->
<div class="bar"> <!-- but not this -->
<div class="bar"> <!-- or this -->
</div>
</div>
</div>
<div class="bar"> <!-- I don't really care whether we match this -->
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
也就是说,可以.bar在任何内容中选择第一个.foo(无论中间有多少个子元素或兄弟元素),而不是第二个或第三个元素.bar.
我在Mac OS X主机上运行VirtualBox,并使用CentOS客户端.我正在使用Vagrant设置共享文件夹,以便我可以在主机和guest虚拟机上使用代码.
问题是主机的文件系统不区分大小写,但客户端不是.所以,如果我在客人身上运行一些东西:
cd /shared-folder
mkdir foo
mv foo Foo
Run Code Online (Sandbox Code Playgroud)
它会失败,因为它看到Foo已经存在于主机上.这是一个简化的例子,但我有真实的情况,我试图在客户端使用git,它最终做了类似的事情.
有什么方法可以避免这种情况吗?我更愿意提出适用于所有主机操作系统(Windows,Mac和Linux)的东西.
(一个选项可能是将主机的文件rsync到guest虚拟机,但我希望避免这种情况.)
第三方应用程序可以通过任何方式在逻辑上使用Touch ID来验证使用OAuth2的Web服务吗?
假设我拥有一个需要使用OAuth2进行身份验证的Web服务。它支持隐式和授权代码授予(尽管我可以在必要时添加对其他授予的支持)。
第三方有一个使用此Web服务的移动应用程序。它打开一个本地Web视图进行身份验证,然后在其中加载我的身份验证URL。用户在我的域上输入他们的用户名/密码,然后我将OAuth令牌返回给应用程序。
如果此应用想要实现Touch ID以加快身份验证,是否有一种方法可以对OAuth2有意义?
我的理解是,OAuth2隐式和auth-code授予的目的是防止父级应用访问用户的凭据。它只能访问生成的OAuth令牌,并且仅在有限的时间内有效。
使用Touch ID,通常可以使用Keychain Services来存储密码。因此,这显然要求您有权访问密码。
我想他们可以将OAuth令牌存储在钥匙串中而不是密码中,但是那只在短时间内有效。
在Visual Studio Code(1.28.2,Mac OS 10.14,禁用所有扩展)中编辑React项目时,整个系统通常会缓慢进行爬网。目前尚不清楚是什么触发了此操作,但似乎只是普通的文本编辑。
通常,当我查看VSCode的Process Explorer时,该electron_node tsserver.js进程使用的CPU最多。
是否可以禁用使此过程运行的任何功能?我不介意失去功能;我只希望能够编辑文件。
我有一个Ansible变量,包含一个Web服务器列表(全部在同一主机上):
servers:
- foo
- bar
- baz
Run Code Online (Sandbox Code Playgroud)
并且任务更改其配置文件,并将结果注册到变量中:
- name: create server configs
template: ...
with_items: "{{ servers }}"
notify: restart changed servers
register: servers_changed
Run Code Online (Sandbox Code Playgroud)
还有一个处理程序,它只重新启动运行该任务时更改的服务器:
- name: restart changed servers
command: restart-my-server {{ item.item.name }}
when: item.changed
with_items: "{{ servers_changed.results }}"
Run Code Online (Sandbox Code Playgroud)
我的问题是,我现在需要多个任务,如上面的那个,它们会改变不同的配置文件.但如果我这样做,他们将覆盖servers_changed变量,因此只会使用最后一个变量.
我可以在每个任务中注册不同的变量,但是每个任务都需要一个不同的处理程序.这会变得混乱.有没有更好的办法?
css ×2
ansible ×1
dependencies ×1
factory ×1
javascript ×1
macos ×1
metadata ×1
oauth-2.0 ×1
oop ×1
php ×1
subclass ×1
touch-id ×1
typescript ×1
vagrant ×1
virtualbox ×1