php-general Digest 8 Dec 2010 10:14:56 -0000 Issue 7075
Topics (messages 309896 through 309906):
Re: new keyword combined with other things...
309896 by: Alexandru Patranescu
309897 by: Paul M Foster
309898 by: David Harkness
newbie basic realm protection - why don't the input usr/pass stick?
309899 by: Govinda
309905 by: Kranthi Krishna
PHP4 to PHP5 migration with E_STRICT
309900 by: Tom Robinson
309901 by: David Harkness
309903 by: Tom Robinson
309906 by: Richard Quadling
No errors gets displayed, just a blank page
309902 by: Rico Secada
309904 by: Kranthi Krishna
Administrivia:
To subscribe to the digest, e-mail:
php-general-digest-subscr...@lists.php.net
To unsubscribe from the digest, e-mail:
php-general-digest-unsubscr...@lists.php.net
To post to the list, e-mail:
php-gene...@lists.php.net
----------------------------------------------------------------------
--- Begin Message ---
I know how to do it in other ways.
I was just wondering why the simple new Object() -> method won't work. new
operator has precedence over.......
That must be the problem. -> is not an operator. Is not in this list:
http://php.net/manual/en/language.operators.precedence.php
That must be done. -> should be an operator!
Alex
On Tue, Dec 7, 2010 at 10:49 PM, Jim Lucas <li...@cmsws.com> wrote:
> On 12/7/2010 7:40 AM, Alexandru Patranescu wrote:
> > In many other languages this will work:
> >
> > *$result = new Object() -> method();*
> >
> > But in php, it fails at parsing.
> > I've tried with parenthesis around new but nothing. Anyhow, as I saw
> later,
> > *new* operator has precedence over others so this couldn't be a solution.
> > I know a static function can be defined and the above statement can
> > transform into
> >
> > *$result = Object::getNewInstance() -> method()*
> >
> > but is there any way to write it directly? and if not, why isn't this
> > implemented yet and when will it be?
> >
> > best regards,
> > Patranescu Alexandru
> >
>
>
> Here is what I do if I want to make it a one liner...
>
> <?php
>
> function myNew($obj='stdClass') {
> return new $obj();
> }
>
> class CustomClass {
> function PrintString($str='Something')
> {
> print($str);
> }
> function ReturnString($str='Something')
> {
> return $str;
> }
> }
>
>
> myNew('CustomClass')->PrintString();
>
> echo myNew('CustomClass')->ReturnString('Something Else');
>
> $var = myNew('CustomClass')->ReturnString('And again...');
>
> echo $var;
>
> ?>
>
> I also use the following if I want to use the Singleton method of getting
> my data.
>
> <?php
>
> class myClass {
> static $_instance;
> static function run($DefaultValues=null)
> {
> if(self::$_instance === null)
> {
> //First and only construction.
> self::$_instance = new self($DefaultValues);
> }
> return self::$_instance;
> }
> function PrintString($str='Default Value')
> {
> print $str;
> }
> function ReturnString($str='Something')
> {
> return $str;
> }
> }
>
> myClass::run()->PrintString();
>
> echo myClass::run()->ReturnString();
>
> $var = myClass::run()->ReturnString();
>
> echo $var;
>
> ?>
>
> YMMV
>
--- End Message ---
--- Begin Message ---
On Tue, Dec 07, 2010 at 11:01:09PM +0200, Alexandru Patranescu wrote:
> I know how to do it in other ways.
> I was just wondering why the simple new Object() -> method won't work. new
> operator has precedence over.......
> That must be the problem. -> is not an operator. Is not in this list:
> http://php.net/manual/en/language.operators.precedence.php
> That must be done. -> should be an operator!
I haven't followed this thread closely, but I see code like this in
CodeIgniter a lot. I don't code like this, but it appears that they only
write this kind of code using already instantiated objects. Here is an
example from their user manual:
$this->db->select('title')->from('mytable')->where('id', $id)->limit(10,
20);
What kind of internal magic they use to make this work, I don't know. I
haven't examined their internals.
Paul
--
Paul M. Foster
--- End Message ---
--- Begin Message ---
On Tue, Dec 7, 2010 at 1:55 PM, Paul M Foster <pa...@quillandmouse.com>wrote:
> Here is an example from their [CodeIgniter] user manual:
>
> $this->db->select('title')->from('mytable')->where('id', $id)->limit(10,
> 20);
>
This is known as a "fluent interface" because it attempts to make your code
read more naturally--i.e. fluently. Each method returns either a new object
or the same object ($this) so it can flow into the next method call. In the
latter case, the initial object stored in $this->db implements all the above
methods. I first saw this in mock object libraries for Java, but it was
invented years earlier.
$mock = $this->getMock('Calculator');
$mock->expect('add')->once()->with(3, 5)->willReturn(8);
David
--- End Message ---
--- Begin Message ---
Hi everyone
I am hacking my way through something unrelated to this post.. but
needed to stop and (real quick) pass-protect a page to use it to run
some quick (*admin-only*) scripts on a shared host.
..and I see now how poor is my understanding of what seems like basic
stuff. As a start for my quick understanding to pass protect a page,
I used the "Example #6 Basic HTTP Authentication example", from here:
http://www.php.net/manual/en/features.http-auth.php
..which is just this:
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</
p>";
}
?>
..and no matter what i type in the authentication dialogue that pops
up.. then after I submit it.. it just keeps looping forever popping up
the dialogue.. I.e. I never get past the authenticate dialogue to see
this line executed:
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
What am I missing?
Thanks for your bothering to help with this,
------------
Govinda
--- End Message ---
--- Begin Message ---
you script looks (and works) fine. so i dont think the problem is in your script
I found firebug/live http headers firefox addons to be helpful in this situation
see if your client is actually sending "Authorization Basic" header
Kranthi.
http://goo.gl/e6t3
--- End Message ---
--- Begin Message ---
Hi,
I'm migrating a web application written for PHP4 to PHP5. I've turned on
E_STRICT to have a detailed look at all the code thoroughly. I have a
number of 'Notices' and 'Strict Standards' messages appearing now.
I don't consider myself a PHP guru by any means so I'm seeking help with
understanding these messages and how to fix the code.
One of the messages is:
"PHP Strict Standards: Only variables should be assigned by reference in"
This is for a class SPControlPanel with a method
function getContentTypes(&$db)
{
$tabledata = array();
$sql = "select
contenttype.*
from
contenttype";
return $db->queryAll($sql, true);
}
The warning is for this segment of code below which is another method in
the same class (marked with comment // this line):
function getCategoryTypes(&$db) {
$tabledata = array();
$myContentTypes = &SPControlPanel::getContentTypes($db); // this
line
foreach ($myContentTypes as $key => $data) {
if ($data['iscategory']) $tabledata[] = $data['contenttype'];
}
return $tabledata;
}
There are many more methods making assignments in a similar way in this
class and in other classes throughout the code.
I'm not sure of the best way to re-code this to resolve the E_STRICT
warning.
Any help is much appreciated.
Regards,
Tom
--- End Message ---
--- Begin Message ---
In getCategoryTypes() you're assigning a reference to the return value of
getContentTypes(), and PHP doesn't like that. You can return a reference to
a variable from a function, but taking the reference of a *value* is
meaningless since you can only create references to variables. Just remove
the & on that marked line to get rid of the warning.
Also, I notice that both of those methods (and I assume many more) take a
reference in $db. Note that all objects are assigned by reference in PHP 5,
and thus the & here is unnecessary since you are passing an object to these
methods and aren't changing the reference inside the method. Note that PHP
won't issue a warning for these since it is acceptable and you might want to
point the reference to a new object inside the function. You aren't doing
that here, so the & is superfluous and misleading.
David
--- End Message ---
--- Begin Message ---
Thanks David.
If my understanding is correct, then:
SPControlPanel::getContentTypes($db);
is a reference to a static instantiation of the class. If so, then it
must be syntactically something like when using 'new' (which returns a
reference) so there's no need to apply the & operator. Am I on the right
track?
I have some more PHP4 code in the application which caused: "PHP
Notice: Only variable references should be returned by reference". I
have fixed it like this:
< function & _getTable($cached=true)
< {
< return new TableClass($this->_getTableName());
---
> function & _getTable($cached=true) {
> $temp = new TableClass($this->_getTableName());
> return $temp;
Is this acceptable?
I'll have to come back to the $db issue - it's not issuing a warning so
I'll leave it alone until I've tidied up all the other issues.
Regards,
Tom
--- End Message ---
--- Begin Message ---
On 8 December 2010 01:12, Tom Robinson <tom.robin...@motec.com.au> wrote:
> Thanks David.
>
> If my understanding is correct, then:
>
> SPControlPanel::getContentTypes($db);
>
> is a reference to a static instantiation of the class. If so, then it
> must be syntactically something like when using 'new' (which returns a
> reference) so there's no need to apply the & operator. Am I on the right
> track?
>
> I have some more PHP4 code in the application which caused: "PHP
> Notice: Only variable references should be returned by reference". I
> have fixed it like this:
>
> < function & _getTable($cached=true)
> < {
> < return new TableClass($this->_getTableName());
> ---
>> function & _getTable($cached=true) {
>> $temp = new TableClass($this->_getTableName());
>> return $temp;
>
> Is this acceptable?
>
> I'll have to come back to the $db issue - it's not issuing a warning so
> I'll leave it alone until I've tidied up all the other issues.
>
> Regards,
>
> Tom
I'd go with ...
function _getTable($cached=true) {
return new TableClass($this->_getTableName());
}
--
Richard Quadling
Twitter : EE : Zend
@RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY
--- End Message ---
--- Begin Message ---
Hi.
What can cause that no parse error gets displayed (blank page/no output
at all) even though error reporting is set to "-1"?
I have run the script through php lint on the console and it comes up
with no errors.
I have run into this problem the last couple of days making debugging a
nightmare.
Anyone with experience in this behavior?
Thanks and best regards
Rico
--- End Message ---
--- Begin Message ---
wats the setting of display_errors php.net/display_errors ?
if you are not getting any output it might be because of a simple
parse error (mismatched brackets, misplaced semicolon etc) or an
exit/die command
Kranthi.
http://goo.gl/e6t3
--- End Message ---