Welcome to WebmasterWorld Guest from 54.163.142.67

Forum Moderators: coopster & jatar k

Message Too Old, No Replies

PHP fails without error

     
2:36 am on May 4, 2006 (gmt 0)

Junior Member

10+ Year Member

joined:Apr 26, 2003
posts:123
votes: 0


I have been trying to do the following (in more complex code but it fails without an error and does not output anything. The last error in the apache error file was "Invalid URI in request GET HTTP/1.1". I am running "PHP Version 5.0.4".

Can anyone see anything wrong with this code?

If I remove the "$test -> control -> dump();" line, everything works.


<?php

//could be written in a shorter way, but lets be obvious.
error_reporting(E_ALL E_STRICT E_CORE_ERROR E_CORE_WARNING E_COMPILE_ERROR E_COMPILE_WARNING E_USER_ERROR E_USER_WARNING E_USER_NOTICE );

class Control{
public $key = null;
public function dump(){
var_dump($this->key);
}
}
class Form {
public $control = null;
function __set($a, $b){
$b->key = $a;
var_dump($a);
var_dump($b);
$this->control = $b;
}
}

$test = new Form();
$key = '123';
$test->$key = new Control();
$test -> control -> dump();
echo 'completed';
exit;

5:57 am on May 4, 2006 (gmt 0)

Senior Member

WebmasterWorld Senior Member 10+ Year Member

joined:Nov 15, 2004
posts:1867
votes: 0


I am still struggling to know the inside out of classes but from from my assesment your Control function has got C in caps. I hope classes too are case sensitive ;)

Habtom

7:03 am on May 4, 2006 (gmt 0)

Senior Member

WebmasterWorld Senior Member 10+ Year Member

joined:Jan 7, 2003
posts:1230
votes: 0


one question:

* is output buffering on or off?

--hakre

10:24 am on May 4, 2006 (gmt 0)

Junior Member

10+ Year Member

joined:Apr 26, 2003
posts:123
votes: 0


No sign of output buffering... so no.
and the server now seems to give me a:

Server Error
The following error occurred:

[code=SERVER_RESPONSE_CLOSE] The server closed the connection while reading the response. Contact your system administrator.
Please contact the administrator.

error when I have the:
$test -> control -> dump();
line in, but works fine when
//$test -> control -> dump();
is commented out.

10:35 am on May 4, 2006 (gmt 0)

Junior Member

10+ Year Member

joined:Apr 26, 2003
posts:123
votes: 0


Well I have made progress and now I am only left with the question... WHY?

In the end it was only one character that needed adding to make it work.

If I change the line:


$b->key = $a;

To be:


$b->key =& $a;

It all works.

Just an


&

Strange....
So can any one say WHY?

1:33 pm on May 4, 2006 (gmt 0)

Administrator

WebmasterWorld Administrator coopster is a WebmasterWorld Top Contributor of All Time 10+ Year Member

joined:July 31, 2003
posts:12541
votes: 1


Habtom, classes can have uppercase and lowercase letters and can begin with uppercase without any issues. Basically, class names follow the same rules as other labels in PHP. A valid class name starts with a letter or underscore, followed by any number of letters, numbers, or underscores. One thing to be cautious of though is using names that start with double underscores. That, and more cautions, can be read here:
[php.net...]

thing3b, perhaps you can gain an understanding from the example in the PHP manual regarding References inside the constructor [php.net] as well as References Explained [php.net].

10:00 pm on May 4, 2006 (gmt 0)

Junior Member

10+ Year Member

joined:Apr 26, 2003
posts:123
votes: 0


Someone pointed out that my original code does work like it should on Windows running PHP 5.0.4. I checked this and it works on Windows XP with PHP 5.0.5 as well.

I know what the & should do, but this issue is not a coding error, but a bug in the way PHP 5.0.4 is set up on my linux server. I am not sure if the bug is in PHP its self or one of the zend php extentions things.