前几天我遇到了这个看似非常简单的问题如何在不引用$ array1的情况下更改$ array2中的值?然而,我越是调查它就越奇怪,它似乎确实按预期运作.在此之后,我开始研究从以下输出生成的操作码.
$array1 = array(2, 10);
$x = &$array1[1];
$array2 = $array1;
$array2[1] = 22;
echo $array1[1]; // Outputs 22
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很疯狂,因为array2应该只是array1的副本,并且发生在一个数组中的任何内容都不应该影响另一个数组的内容.当然,如果你注释掉第二行,最后一行将像预期的那样回应10.
看得更远,我可以在一个很酷的网站上向我展示PHP使用Vulcan Logic Dumper生成的操作码.这是上面代码生成的操作码.
Finding entry points
Branch analysis from position: 0
Return found
filename: /in/qO86H
function name: (null)
number of ops: 11
compiled vars: !0 = $array1, !1 = $x, !2 = $array2
line # * op fetch ext return operands
---------------------------------------------------------------------------------
3 0 > INIT_ARRAY ~0 2
1 ADD_ARRAY_ELEMENT ~0 10
2 ASSIGN !0, ~0 …
Run Code Online (Sandbox Code Playgroud) 每次我尝试将中等大小的JSON对象同步到我的数据库时,我都遇到了这个问题,因此我们可以对它进行一些报告.通过研究可能导致它的原因,我在这个问题上遇到了这些联系.
http://blog.corrlabs.com/2013/04/mysql-prepared-statement-needs-to-be-re.html http://bugs.mysql.com/bug.php?id=42041
两者似乎都指向了table_definition_cache的方向.但是,这就是说问题是由于服务器上同时发生了mysqldump.我可以向你保证,事实并非如此.此外,我将查询精简到一次只插入一个对象.
public function fire($job, $data)
{
foreach (unserialize($data['message']) as $org)
{
// Ignore ID 33421 this will time out.
// It contains all users in the system.
if($org->id != 33421) {
$organization = new Organization();
$organization->orgsync_id = $org->id;
$organization->short_name = $org->short_name;
$organization->long_name = $org->long_name;
$organization->category = $org->category->name;
$organization->save();
$org_groups = $this->getGroupsInOrganization($org->id);
if (!is_int($org_groups))
{
foreach ($org_groups as $group)
{
foreach($group->account_ids as $account_id)
{
$student = Student::where('orgsync_id', '=', $account_id)->first();
if (is_object($student))
{
$student->organizations()->attach($organization->id, array('is_officer' => ($group->name == 'Officers'))); …
Run Code Online (Sandbox Code Playgroud) 我目前无法找到解决此问题的方法.如果我有一个结构,我想用http.quest中的json填充,我无法告诉例如实际传递了什么值的某些值.例如,如果我传入一个空的json对象并在看起来像这样的结构上运行json.Decode ...
var Test struct {
Number int `json:"number"`
}
Run Code Online (Sandbox Code Playgroud)
我现在有一个json对象,据说传递的是一个数字键和一个零值,实际上我宁愿让这个返回什么都没有.是否提供了另一种方法,它实际上允许我查看传入的JSON是什么.
对不起,我一直在试图弄清楚这几天如何,这让我疯了.
谢谢你的帮助.
编辑:
我这样做是为了描述我正在谈论的内容http://play.golang.org/p/aPFKSvuxC9
我理解Go接口的一般概念.但是,我最近正在考虑实现io.Reader
界面,这让我很困惑.我发现这篇文章并没有多大帮助.
首先,接受的答案是使用io.Reader
的Read
功能,据我可以告诉永远不会实现.其次,该Read
功能如何在类似的情况下工作ioutil.ReadAll
.它需要一些实现io.Reader
接口并返回一片字节的东西.我不明白是什么东西只返回一个int
并且err
可以被处理成一片字节.
编辑:
我在疯狂的IRC频道得到了帮助,这就是你如何实际实现一个http://play.golang.org/p/ejpUVOx8jR的答案.非常感谢go社区.
编辑2:
如下所述,在strign大于缓冲区的情况下,上述实现将失败.这是一个更健全的实现http://play.golang.org/p/t4Zg8TnF33.
我正在尝试将我的所有服务器升级到目前的PHP 5.6,除了安装oci8之外,它已经很好了.它与php55配合得很好,我甚至还推出了一个带有centos的全新vagrantbox来测试它并确保它是一个完全干净的安装.
当我尝试运行安装时,我收到以下错误.
# pecl install oci8
downloading oci8-2.0.8.tgz ...
Starting to download oci8-2.0.8.tgz (190,854 bytes)
.........................................done: 190,854 bytes
11 source files, building
running: phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
Please provide the path to the ORACLE_HOME directory. Use 'instantclient,/path/to/instant/client/lib' if you're compiling with Oracle Instant Client [autodetect] :
building in /var/tmp/pear-build-rootMIYqiX/oci8-2.0.8
running: /var/tmp/oci8/configure --with-oci8
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep …
Run Code Online (Sandbox Code Playgroud) 我相信我理解在正常使用情况下推迟.比如这个问题中列出的Golang defer行为.然而,当一个不返回的goroutine内部调用defer时,我有点感到困惑.这是有问题的代码.
func start_consumer() {
conn, _ := amqp.Dial("amqp://username:password@server.com")
//defer conn.Close()
ch, _ := conn.Channel()
//defer ch.Close()
q, _ := ch.QueueDeclare(
"test", // name
true, // durable
false, // delete when unused
false, // exclusive
false, // no-wait
nil, // arguments
)
_ = ch.Qos(
3, // prefetch count
0, // prefetch size
false, // global
)
forever := make(chan bool)
go func() {
for {
msgs, _ := ch.Consume(
q.Name, // queue
"", // consumer
false, // …
Run Code Online (Sandbox Code Playgroud) 我正在查看Laravel文档,我看到了这个片段:
class UserController extends BaseController {
/**
* The layout that should be used for responses.
*/
protected $layout = 'layouts.master';
/**
* Show the user profile.
*/
public function showProfile()
{
$this->layout->content = View::make('user.profile');
}
}
Run Code Online (Sandbox Code Playgroud)
我们可以清楚地看到$ this-> layout ='layouts.master'.但是,然后他们定义了布局对象的子代(据我所知,它只是一个基本的PHP字符串,并且没有一个名为content的字段,通过......
$this->layout->content = View::make('user.profile');
字符串如何定义一个名为content的字段?
当我将BaseController子类化并尝试为$ this-> layout-> content分配一个值时,为什么会出现以下错误:"尝试分配非对象的属性"?