Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.php > #4285 > unrolled thread

prüfen ob eine Funktion etwas ausgibt / - Inhalt hat

Started byJosh Mehrtens <jom@mail.invalid>
First post2017-10-07 16:19 +0200
Last post2017-10-10 13:34 +0200
Articles 17 — 5 participants

Back to article view | Back to de.comp.lang.php


Contents

  prüfen ob eine Funktion etwas ausgibt / - Inhalt hat Josh Mehrtens <jom@mail.invalid> - 2017-10-07 16:19 +0200
    Re: prüfen ob eine Funktion etwas ausgibt / - Inhalt hat "Christoph M. Becker" <cmbecker69@arcor.de> - 2017-10-07 19:49 +0200
      Re: prüfen ob eine Funktion etwas ausgibt / - Inhalt hat Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-10-08 03:19 +0200
        Re: prüfen ob eine Funktion etwas ausgibt / - Inhalt hat Josh Mehrtens <jom@mail.invalid> - 2017-10-10 13:37 +0200
        Re: prüfen ob eine Funktion etwas ausgibt / - Inhalt hat "Christoph M. Becker" <cmbecker69@arcor.de> - 2017-10-10 14:28 +0200
          Re: prüfen ob eine Funktion etwas ausgibt / - Inhalt hat Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-10-10 15:31 +0200
            Re: prüfen ob eine Funktion etwas ausgibt / - Inhalt hat Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2017-10-10 13:58 +0000
              Re: prüfen ob eine Funktion etwas ausgibt / - Inhalt hat Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-10-10 16:07 +0200
            Re: prüfen ob eine Funktion etwas ausgibt / - Inhalt hat "Christoph M. Becker" <cmbecker69@arcor.de> - 2017-10-10 18:58 +0200
              Re: prüfen ob eine Funktion etwas ausgibt / - Inhalt hat Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-10-10 20:24 +0200
                Re: prüfen ob eine Funktion etwas ausgibt / - Inhalt hat "Christoph M. Becker" <cmbecker69@arcor.de> - 2017-10-11 01:02 +0200
                  Re: prüfen ob eine Funktion etwas ausgibt / - Inhalt hat k@rl.pflaesterer.de (Karl Pflästerer) - 2017-10-11 16:38 +0200
                    Re: prüfen ob eine Funktion etwas ausgibt / - Inhalt hat "Christoph M. Becker" <cmbecker69@arcor.de> - 2017-10-12 00:45 +0200
    Re: prüfen ob eine Funktion etwas ausgibt / - Inhalt hat "Christoph M. Becker" <cmbecker69@arcor.de> - 2017-10-07 19:49 +0200
      Re: prüfen ob eine Funktion etwas ausgibt / - Inhalt hat Josh Mehrtens <jom@mail.invalid> - 2017-10-07 23:40 +0200
        Re: prüfen ob eine Funktion etwas ausgibt / - Inhalt hat "Christoph M. Becker" <cmbecker69@arcor.de> - 2017-10-08 01:13 +0200
          Re: prüfen ob eine Funktion etwas ausgibt / - Inhalt hat Josh Mehrtens <jom@mail.invalid> - 2017-10-10 13:34 +0200

#4285 — prüfen ob eine Funktion etwas ausgibt / - Inhalt hat

FromJosh Mehrtens <jom@mail.invalid>
Date2017-10-07 16:19 +0200
Subjectprüfen ob eine Funktion etwas ausgibt / - Inhalt hat
Message-ID<oranpq$1fq$1@dont-email.me>
hi,

es geht um eine Funktion in einem CMS, die keywords ausgibt.

if (function_exists('get_keywords')) { echo "tags: "; get_keywords();

ist ja TRUE, auch wenn keine keywords eingegeben sind.


josh

[toc] | [next] | [standalone]


#4286

From"Christoph M. Becker" <cmbecker69@arcor.de>
Date2017-10-07 19:49 +0200
Message-ID<485c337c-feeb-2d57-3e7e-0cdf9c5c8c7f@arcor.de>
In reply to#4285
Am 07.10.2017 um 16:19 schrieb Josh Mehrtens:

> es geht um eine Funktion in einem CMS, die keywords ausgibt.
> 
> if (function_exists('get_keywords')) { echo "tags: "; get_keywords();
> 
> ist ja TRUE, auch wenn keine keywords eingegeben sind.

Meinst du etwas in der folgenden Art?

  if (function_exists('get_keywords') && $keywords = get_keywords()) {
      echo "tags: $keywords";
  }

-- 
Christoph M. Becker

[toc] | [prev] | [next] | [standalone]


#4290

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2017-10-08 03:19 +0200
Message-ID<1922764.irdbgypaU6@PointedEars.de>
In reply to#4286
Christoph M. Becker wrote:

> Am 07.10.2017 um 16:19 schrieb Josh Mehrtens:
>> es geht um eine Funktion in einem CMS, die keywords ausgibt.
>> 
>> if (function_exists('get_keywords')) { echo "tags: "; get_keywords();
>> 
>> ist ja TRUE, auch wenn keine keywords eingegeben sind.
> 
> Meinst du etwas in der folgenden Art?
> 
>   if (function_exists('get_keywords') && $keywords = get_keywords()) {
>       echo "tags: $keywords";
>   }

Zwecks besserer Les- und Wartbarkeit empfehle ich

  if (function_exists('get_keywords') && ($keywords = get_keywords())) {
    echo "tags: $keywords";
  }

Zu beachten ist auch, dass das Ergebnis einer Zuweisung der Wert der 
*rechten* Seite, _nicht_ der der linken Seite, ist.  Das ist nur solange 
egal, wie auf der linken Seite keine Referenz auf eine Eigenschaft mit
einem Setter steht.  (Das gilt übrigens gleichermassen für ECMAScript.)

$ php -r 'class C { public function __set ($property, $value) {
$this->$property = (int) $value; }} $o = new C(); echo ($o->x = "foo");
echo "\n". $o->x . "\n";' 2>/dev/null
foo
0

-- 
PointedEars
Zend Certified PHP Engineer <http://www.zend.com/en/yellow-pages/ZEND024953>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4292

FromJosh Mehrtens <jom@mail.invalid>
Date2017-10-10 13:37 +0200
Message-ID<oribea$rvm$1@dont-email.me>
In reply to#4290
Am 08.10.2017 um 03:19 schrieb Thomas 'PointedEars' Lahn:
> Christoph M. Becker wrote:
> 
>> Am 07.10.2017 um 16:19 schrieb Josh Mehrtens:
>>> es geht um eine Funktion in einem CMS, die keywords ausgibt.
>>>
>>> if (function_exists('get_keywords')) { echo "tags: "; get_keywords();
>>>
>>> ist ja TRUE, auch wenn keine keywords eingegeben sind.
>>
>> Meinst du etwas in der folgenden Art?
>>
>>    if (function_exists('get_keywords') && $keywords = get_keywords()) {
>>        echo "tags: $keywords";
>>    }
> 
> Zwecks besserer Les- und Wartbarkeit empfehle ich
> 
>    if (function_exists('get_keywords') && ($keywords = get_keywords())) {
>      echo "tags: $keywords";
>    }
> 
> Zu beachten ist auch, dass das Ergebnis einer Zuweisung der Wert der
> *rechten* Seite, _nicht_ der der linken Seite, ist.  Das ist nur solange
> egal, wie auf der linken Seite keine Referenz auf eine Eigenschaft mit
> einem Setter steht.
ich lief damit wieder ins oben beschriebene Problem der zu frühen 
Ausgabe: Im "if" passiert sie schon ...
irgendwie tricky

Gruß, josh

>  (Das gilt übrigens gleichermassen für ECMAScript.)
> 
> $ php -r 'class C { public function __set ($property, $value) {
> $this->$property = (int) $value; }} $o = new C(); echo ($o->x = "foo");
> echo "\n". $o->x . "\n";' 2>/dev/null
> foo
> 0
> 

[toc] | [prev] | [next] | [standalone]


#4293

From"Christoph M. Becker" <cmbecker69@arcor.de>
Date2017-10-10 14:28 +0200
Message-ID<oriedd$b5b$1@solani.org>
In reply to#4290
Am 08.10.2017 um 03:19 schrieb Thomas 'PointedEars' Lahn:

> Christoph M. Becker wrote:
> 
>> Meinst du etwas in der folgenden Art?
>>
>>   if (function_exists('get_keywords') && $keywords = get_keywords()) {
>>       echo "tags: $keywords";
>>   }
> 
> Zwecks besserer Les- und Wartbarkeit empfehle ich
> 
>   if (function_exists('get_keywords') && ($keywords = get_keywords())) {
>     echo "tags: $keywords";
>   }

Ja, das ist sinnvoll. Es gibt möglicherweise auch einige Analyser, die
ohne die Klammerung der Zuweisung eine Warnung ausgeben – ist zumindest
bei C nicht unüblich.

> Zu beachten ist auch, dass das Ergebnis einer Zuweisung der Wert der 
> *rechten* Seite, _nicht_ der der linken Seite, ist.  Das ist nur solange 
> egal, wie auf der linken Seite keine Referenz auf eine Eigenschaft mit
> einem Setter steht.  (Das gilt übrigens gleichermassen für ECMAScript.)
> 
> $ php -r 'class C { public function __set ($property, $value) {
> $this->$property = (int) $value; }} $o = new C(); echo ($o->x = "foo");
> echo "\n". $o->x . "\n";' 2>/dev/null
> foo
> 0

Interessant – war mir nicht bewusst. Da ist dann wohl das PHP
Handbuch[1] fehlerhaft:

| The value of an assignment expression is the value assigned.

Und auch in der Sprachspezifikation[2] müsste wohl nachgebessert werden.

[1] <http://www.php.net/manual/en/language.operators.assignment.php>
[2] <https://github.com/php/php-langspec/blob/master/spec/10-expressions.md>

-- 
Christoph M. Becker

[toc] | [prev] | [next] | [standalone]


#4294

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2017-10-10 15:31 +0200
Message-ID<2895559.aeNJFYEL58@PointedEars.de>
In reply to#4293
Christoph M. Becker wrote:

> Am 08.10.2017 um 03:19 schrieb Thomas 'PointedEars' Lahn:
>> Zu beachten ist auch, dass das Ergebnis einer Zuweisung der Wert der
>> *rechten* Seite, _nicht_ der der linken Seite, ist.  Das ist nur solange
>> egal, wie auf der linken Seite keine Referenz auf eine Eigenschaft mit
>> einem Setter steht.  (Das gilt übrigens gleichermassen für ECMAScript.)
>> 
>> $ php -r 'class C { public function __set ($property, $value) {
>> $this->$property = (int) $value; }} $o = new C(); echo ($o->x = "foo");
>> echo "\n". $o->x . "\n";' 2>/dev/null
>> foo
>> 0
> 
> Interessant – war mir nicht bewusst. Da ist dann wohl das PHP
> Handbuch[1] fehlerhaft:
> […]
> 
> | The value of an assignment expression is the value assigned.
> […]
> [1] <http://www.php.net/manual/en/language.operators.assignment.php>

Das ist nicht fhcsal, aber gerade für Nicht-Muttersprachler 
missverständlich.  “the value assigned” ist der *adjektivische* Gebrauch des 
/past participle/ von “assign”, gleichbedeutend mit “assigned value”.  Dort 
steht ohne Reduktion deshalb “the value that is assigned”; _nicht_ “the 
value that was/has been assigned” (wegen “is” statt “was”):

<https://en.wikipedia.org/wiki/Participle#Modern_English>

„Der zugewiesene Wert“ bzw. „Der Wert, der zugewiesen *wird* (_nicht_: 
wurde)“ ist nicht unbedingt der Wert, den die *linke* Seite *nach* der 
Zuweisung hat; es ist aber auf jeden Fall der Wert der rechten Seite.
 
> Und auch in der Sprachspezifikation[2] müsste wohl nachgebessert werden.
> […]
> [2]
> [<https://github.com/php/php-langspec/blob/master/spec/10-expressions.md>

Ja, auf jeden Fall.  Zu beachten ist jedoch auch, dass es sich um ein 
Beispiel handelt (“For example, …”), und solche sind nie normativ.

-- 
PointedEars
Zend Certified PHP Engineer <http://www.zend.com/en/yellow-pages/ZEND024953>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4295

FromStefan+Usenet@Froehlich.Priv.at (Stefan Froehlich)
Date2017-10-10 13:58 +0000
Message-ID<1t59dcd160i770fn3e8%sfroehli@Froehlich.Priv.at>
In reply to#4294
On Tue, 10 Oct 2017 15:31:40 Thomas 'PointedEars' Lahn wrote:
> Christoph M. Becker wrote:
> > Am 08.10.2017 um 03:19 schrieb Thomas 'PointedEars' Lahn:
> >> Zu beachten ist auch, dass das Ergebnis einer Zuweisung der Wert der
> >> *rechten* Seite, _nicht_ der der linken Seite, ist.  Das ist nur
> >> solange egal, wie auf der linken Seite keine Referenz auf eine
> >> Eigenschaft mit einem Setter steht.

> > Interessant – war mir nicht bewusst. Da ist dann wohl das PHP
> > Handbuch[1] fehlerhaft:
> > […]

> > | The value of an assignment expression is the value assigned.
> > […]
> > [1] <http://www.php.net/manual/en/language.operators.assignment.php>
 
> Das ist nicht fhcsal, aber gerade für Nicht-Muttersprachler
> missverständlich.  “the value assigned” ist der *adjektivische* Gebrauch
> des /past participle/ von “assign”, gleichbedeutend mit “assigned value”.
> Dort steht ohne Reduktion deshalb “the value that is assigned”; _nicht_
> “the value that was/has been assigned” (wegen “is” statt “was”):
> 
> <https://en.wikipedia.org/wiki/Participle#Modern_English>
> 
> „Der zugewiesene Wert“ bzw. „Der Wert, der zugewiesen *wird* (_nicht_: 
> wurde)“ ist nicht unbedingt der Wert, den die *linke* Seite *nach* der 
> Zuweisung hat; es ist aber auf jeden Fall der Wert der rechten Seite.

Ich bin mir nicht sicher, ob das für Mutterprachler weniger
missverständlich ist. Die Formulierung "der zugewiesene Wert" kann MUSEN
nach auch sowohl für das, was von der Quelle zugewiesen wird verwendet
werden, als auch für das, was dann letztendlich dem Ziel zugewiesen wurde.
Die Missverständlichkeit beruht wohl (in beiden Sprachen) darauf, dass im
allgemeinen Sprachverständnis zwischen den beiden Begriffen kein
Unterschied besteht.

Servus,
   Stefan

-- 
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Stefan: das süße Geheimnis!
(Sloganizer)

[toc] | [prev] | [next] | [standalone]


#4296

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2017-10-10 16:07 +0200
Message-ID<7361720.T7Z3S40VBb@PointedEars.de>
In reply to#4295
Stefan Froehlich wrote:

> On Tue, 10 Oct 2017 15:31:40 Thomas 'PointedEars' Lahn wrote:
>> Christoph M. Becker wrote:
>> > | The value of an assignment expression is the value assigned.
>> > […]
>> > [1] <http://www.php.net/manual/en/language.operators.assignment.php>
>  
>> Das ist nicht fhcsal, aber gerade für Nicht-Muttersprachler
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> missverständlich.  “the value assigned” ist der *adjektivische* Gebrauch
>> des /past participle/ von “assign”, gleichbedeutend mit “assigned value”.
>> Dort steht ohne Reduktion deshalb “the value that is assigned”; _nicht_
>> “the value that was/has been assigned” (wegen “is” statt “was”):
>> 
>> <https://en.wikipedia.org/wiki/Participle#Modern_English>
>> 
>> „Der zugewiesene Wert“ bzw. „Der Wert, der zugewiesen *wird* (_nicht_:
>> wurde)“ ist nicht unbedingt der Wert, den die *linke* Seite *nach* der
>> Zuweisung hat; es ist aber auf jeden Fall der Wert der rechten Seite.
> 
> Ich bin mir nicht sicher, ob das für Mutterprachler weniger
> missverständlich ist. […]

Siehe oben.

Ergänzend: Das /past participle/ erfüllt im Englischen zusätzlich die 
Funktion der Passivkonstruktion, was hier zusätzlich zu Missverständnissen 
führen kann.

-- 
PointedEars
Zend Certified PHP Engineer <http://www.zend.com/en/yellow-pages/ZEND024953>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4297

From"Christoph M. Becker" <cmbecker69@arcor.de>
Date2017-10-10 18:58 +0200
Message-ID<oriu7h$m6v$1@solani.org>
In reply to#4294
Am 10.10.2017 um 15:31 schrieb Thomas 'PointedEars' Lahn:

> Christoph M. Becker wrote:
> 
>> Interessant – war mir nicht bewusst. Da ist dann wohl das PHP
>> Handbuch[1] fehlerhaft:
>> […]
>>
>> | The value of an assignment expression is the value assigned.
>> […]
>> [1] <http://www.php.net/manual/en/language.operators.assignment.php>
> 
> Das ist nicht fhcsal, aber gerade für Nicht-Muttersprachler 
> missverständlich.  “the value assigned” ist der *adjektivische* Gebrauch des 
> /past participle/ von “assign”, gleichbedeutend mit “assigned value”.  Dort 
> steht ohne Reduktion deshalb “the value that is assigned”; _nicht_ “the 
> value that was/has been assigned” (wegen “is” statt “was”):
> 
> <https://en.wikipedia.org/wiki/Participle#Modern_English>
> 
> „Der zugewiesene Wert“ bzw. „Der Wert, der zugewiesen *wird* (_nicht_: 
> wurde)“ ist nicht unbedingt der Wert, den die *linke* Seite *nach* der 
> Zuweisung hat; es ist aber auf jeden Fall der Wert der rechten Seite.

Okay, gehen wir mal davon aus, dass sich "the value assigned"/"der
zugewiesene Wert" tatsächlich eindeutig auf den Ausdruck auf der rechten
Seite des Operators bezieht. Was ist dann mit folgendem?

  $a = 'a';
  $b = 'b';
  $a .= ($b .= 'c');

Müsste dann nicht $a === 'ac' sein? Oder verhalten sich kombinierte
Zuweisungsoperatoren eben etwas anders, wobei ($a .= $b) als ($a = $a .
$b) interpretiert wird? Dann stellt sich mir allerdings die Frage, wieso
<https://3v4l.org/pO3N9> und <https://3v4l.org/8Wde8> ein so
unterschiedliches Ergebnis haben.

-- 
Christoph M. Becker

[toc] | [prev] | [next] | [standalone]


#4298

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2017-10-10 20:24 +0200
Message-ID<1996348.iZASKD2KPV@PointedEars.de>
In reply to#4297
Christoph M. Becker wrote:

> Okay, gehen wir mal davon aus, dass sich "the value assigned"/"der
> zugewiesene Wert" tatsächlich eindeutig auf den Ausdruck auf der rechten
> Seite des Operators bezieht. Was ist dann mit folgendem?
> 
>   $a = 'a';
>   $b = 'b';
>   $a .= ($b .= 'c');
> 
> Müsste dann nicht $a === 'ac' sein?

Ja, müsste es nicht :)

   ($b .= 'c')
   → ($b = $b . 'c')
   → ($b . c)
   → 'bc'

   $a .= ($b .= 'c')
   → $a .= ('bc')
   → $a = $a . 'bc'
   → $a = 'abc'
   → 'abc'

Wie erwartet:

$ php -r '$a = "a"; $b = "b"; echo $a .= ($b .= "c"); echo "\n\$a = $a\n\$b 
= $b\n";' 2>/dev/null
abc
$a = abc
$b = bc

> Oder verhalten sich kombinierte Zuweisungsoperatoren eben etwas anders,
> wobei ($a .= $b) als ($a = $a . $b) interpretiert wird?

Ja, anscheinend.

> Dann stellt sich mir allerdings die Frage, wieso
> <https://3v4l.org/pO3N9> und <https://3v4l.org/8Wde8> ein so
  ^^^^^^^^^^^^^^^^^^^^^^^^     ^^^^^^^^^^^^^^^^^^^^^^^^
> unterschiedliches Ergebnis haben.

Bitte nicht (nur) so.

-- 
PointedEars
Zend Certified PHP Engineer <http://www.zend.com/en/yellow-pages/ZEND024953>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.

[toc] | [prev] | [next] | [standalone]


#4299

From"Christoph M. Becker" <cmbecker69@arcor.de>
Date2017-10-11 01:02 +0200
Message-ID<orjjhl$4vg$1@solani.org>
In reply to#4298
Am 10.10.2017 um 20:24 schrieb Thomas 'PointedEars' Lahn:

> Christoph M. Becker wrote:
> 
>> Dann stellt sich mir allerdings die Frage, wieso
>> <https://3v4l.org/pO3N9> und <https://3v4l.org/8Wde8> ein so
>   ^^^^^^^^^^^^^^^^^^^^^^^^     ^^^^^^^^^^^^^^^^^^^^^^^^
>> unterschiedliches Ergebnis haben.
> 
> Bitte nicht (nur) so.

Du hast natürlich recht (Usenet != WWW); also Präambel:

  class C {
      public function __set ($property, $value) {
          $this->$property = 'baz';
      }
  }
  $a = 'bar';
  $o = new C();

Und dann:

  echo ($a .= ($o->x .= "foo"));
  echo "\n". $o->x . "\n";

vs.:

  echo ($a = $a . ($o->x = $o->x . "foo"));
  echo "\n". $o->x . "\n";

Man könnte annehmen, dass beide Varianten die selbe Ausgabe produzieren,
aber die zweite Zeile ist (sowohl bei PHP als auch bei HHVM):

  foo

beziehungsweise:

  baz

Also ist ($a .= $b) nicht unbedingt äquivalent zu ($a = $a . $b)
(Pseudocode; siehe oben). Aber wie kann man dieses Verhalten (griffig)
beschreiben?

-- 
Christoph M. Becker

[toc] | [prev] | [next] | [standalone]


#4300

Fromk@rl.pflaesterer.de (Karl Pflästerer)
Date2017-10-11 16:38 +0200
Message-ID<m1k20192cj.fsf@mbp.pflaesterer.de>
In reply to#4299
"Christoph M. Becker" <cmbecker69@arcor.de> writes:

> Am 10.10.2017 um 20:24 schrieb Thomas 'PointedEars' Lahn:
>
>> Christoph M. Becker wrote:
>> 
>>> Dann stellt sich mir allerdings die Frage, wieso
>>> <https://3v4l.org/pO3N9> und <https://3v4l.org/8Wde8> ein so
>>   ^^^^^^^^^^^^^^^^^^^^^^^^     ^^^^^^^^^^^^^^^^^^^^^^^^
>>> unterschiedliches Ergebnis haben.
>> 
>> Bitte nicht (nur) so.
>
> Du hast natürlich recht (Usenet != WWW); also Präambel:
>
>   class C {
>       public function __set ($property, $value) {
>           $this->$property = 'baz';
>       }
>   }
>   $a = 'bar';
>   $o = new C();
>
> Und dann:
>
>   echo ($a .= ($o->x .= "foo"));
>   echo "\n". $o->x . "\n";
>
> vs.:
>
>   echo ($a = $a . ($o->x = $o->x . "foo"));
>   echo "\n". $o->x . "\n";
>
> Man könnte annehmen, dass beide Varianten die selbe Ausgabe produzieren,
> aber die zweite Zeile ist (sowohl bei PHP als auch bei HHVM):
>
>   foo
>
> beziehungsweise:
>
>   baz
>
> Also ist ($a .= $b) nicht unbedingt äquivalent zu ($a = $a . $b)
> (Pseudocode; siehe oben). Aber wie kann man dieses Verhalten (griffig)
> beschreiben?

Ist es denn ein Bug oder Feature das .= oder += nicht __set() aufruft?

  KP

[toc] | [prev] | [next] | [standalone]


#4301

From"Christoph M. Becker" <cmbecker69@arcor.de>
Date2017-10-12 00:45 +0200
Message-ID<orm6tj$r8r$1@solani.org>
In reply to#4300
Am 11.10.2017 um 16:38 schrieb Karl Pflästerer:

> "Christoph M. Becker" <cmbecker69@arcor.de> writes:
>
>>   class C {
>>       public function __set ($property, $value) {
>>           $this->$property = 'baz';
>>       }
>>   }
>>   $a = 'bar';
>>   $o = new C();
>>
>> Und dann:
>>
>>   echo ($a .= ($o->x .= "foo"));
>>   echo "\n". $o->x . "\n";
>>
>> vs.:
>>
>>   echo ($a = $a . ($o->x = $o->x . "foo"));
>>   echo "\n". $o->x . "\n";
>>
>> Man könnte annehmen, dass beide Varianten die selbe Ausgabe produzieren,
>> aber die zweite Zeile ist (sowohl bei PHP als auch bei HHVM):
>>
>>   foo
>>
>> beziehungsweise:
>>
>>   baz
> 
> Ist es denn ein Bug oder Feature das .= oder += nicht __set() aufruft?

Gute Frage! Im PHP-Bugtracker kann ich diesbezüglich leider nichts
finden:
<https://bugs.php.net/search.php?search_for=__set+combined&boolean=1&limit=30&order_by=&direction=DESC&cmd=display&status=All&bug_type=All&project=All&php_os=&phpver=&cve_id=&assign=&author_email=&bug_age=0&bug_updated=0&commented_by=>

-- 
Christoph M. Becker

[toc] | [prev] | [next] | [standalone]


#4287

From"Christoph M. Becker" <cmbecker69@arcor.de>
Date2017-10-07 19:49 +0200
Message-ID<orb43g$akm$1@solani.org>
In reply to#4285
Am 07.10.2017 um 16:19 schrieb Josh Mehrtens:

> es geht um eine Funktion in einem CMS, die keywords ausgibt.
> 
> if (function_exists('get_keywords')) { echo "tags: "; get_keywords();
> 
> ist ja TRUE, auch wenn keine keywords eingegeben sind.

Meinst du etwas in der folgenden Art?

  if (function_exists('get_keywords') && $keywords = get_keywords()) {
      echo "tags: $keywords";
  }

-- 
Christoph M. Becker

[toc] | [prev] | [next] | [standalone]


#4288

FromJosh Mehrtens <jom@mail.invalid>
Date2017-10-07 23:40 +0200
Message-ID<orbhkq$b9e$1@dont-email.me>
In reply to#4287
hi,

Am 07.10.2017 um 19:49 schrieb Christoph M. Becker:
> Am 07.10.2017 um 16:19 schrieb Josh Mehrtens:
> 
>> es geht um eine Funktion in einem CMS, die keywords ausgibt.
>>
>> if (function_exists('get_keywords')) { echo "tags: "; get_keywords();
>>
>> ist ja TRUE, auch wenn keine keywords eingegeben sind.
> 
> Meinst du etwas in der folgenden Art?
> 
>    if (function_exists('get_keywords') && $keywords = get_keywords()) {
>        echo "tags: $keywords";
>    }
> 
theoretisch ja. Praktisch klappt das aber nicht:
allein der Aufruf der Funktion hier:
.. $keywords = get_keywords() ..
gibt sie bei mir schon aus.
Das ist zu früh.

Da gibts wohl nichts "einfaches"?
und ich müsst sehen was konkret rauskommt und danach abfragen?

josh

[toc] | [prev] | [next] | [standalone]


#4289

From"Christoph M. Becker" <cmbecker69@arcor.de>
Date2017-10-08 01:13 +0200
Message-ID<orbn2c$msk$1@solani.org>
In reply to#4288
Am 07.10.2017 um 23:40 schrieb Josh Mehrtens:

> Am 07.10.2017 um 19:49 schrieb Christoph M. Becker:
>
>> Am 07.10.2017 um 16:19 schrieb Josh Mehrtens:
>>
>>> es geht um eine Funktion in einem CMS, die keywords ausgibt.
>>>
>>> if (function_exists('get_keywords')) { echo "tags: "; get_keywords();
>>>
>>> ist ja TRUE, auch wenn keine keywords eingegeben sind.
>>
>> Meinst du etwas in der folgenden Art?
>>
>>    if (function_exists('get_keywords') && $keywords = get_keywords()) {
>>        echo "tags: $keywords";
>>    }
>
> theoretisch ja. Praktisch klappt das aber nicht:
> allein der Aufruf der Funktion hier:
> .. $keywords = get_keywords() ..
> gibt sie bei mir schon aus.
> Das ist zu früh.

Wenn get_keywords() echo'd, dann kannst du die Ausgabe mit PHP's
Output-Buffering[1] abfangen:

  if (function_exists('get_keywords')) {
      ob_start();
      get_keywords();
      $keywords = ob_get_clean();
      if ($keywords) {
          echo "tags: $keywords";
      }
  }

Da stellt sich aber die Frage, ob das System nicht auch eine Möglichkeit
bietet abzufragen, ob überhaupt Keywords gesetzt wurden (vielleicht
has_keywords()), und falls nicht, ob das nicht eine sinnvolle
Verbesserung wäre, vorausgesetzt, dass dein Anwendungsfall nicht ganz
untypisch ist.

(Und es stellt sich eigentlich auch die Frage, warum ein mutmaßlicher
Getter Ausgabe erzeugt; könnte dann sprechender vielleicht
print_keywords() heißen.)

[1] <www.php.net/manual/en/ref.outcontrol.php>

-- 
Christoph M. Becker

[toc] | [prev] | [next] | [standalone]


#4291

FromJosh Mehrtens <jom@mail.invalid>
Date2017-10-10 13:34 +0200
Message-ID<orib8p$qoa$1@dont-email.me>
In reply to#4289
hi,

Am 08.10.2017 um 01:13 schrieb Christoph M. Becker:
> Am 07.10.2017 um 23:40 schrieb Josh Mehrtens:
> 
>> Am 07.10.2017 um 19:49 schrieb Christoph M. Becker:
>>
>>> Am 07.10.2017 um 16:19 schrieb Josh Mehrtens:
>>>
>>>> es geht um eine Funktion in einem CMS, die keywords ausgibt.
>>>>
>>>> if (function_exists('get_keywords')) { echo "tags: "; get_keywords();
>>>>
>>>> ist ja TRUE, auch wenn keine keywords eingegeben sind.
>>>
>>> Meinst du etwas in der folgenden Art?
>>>
>>>     if (function_exists('get_keywords') && $keywords = get_keywords()) {
>>>         echo "tags: $keywords";
>>>     }
>>
>> theoretisch ja. Praktisch klappt das aber nicht:
>> allein der Aufruf der Funktion hier:
>> .. $keywords = get_keywords() ..
>> gibt sie bei mir schon aus.
>> Das ist zu früh.
> 
> Wenn get_keywords() echo'd, dann kannst du die Ausgabe mit PHP's
> Output-Buffering[1] abfangen:
> 
>    if (function_exists('get_keywords')) {
>        ob_start();
>        get_keywords();
>        $keywords = ob_get_clean();
>        if ($keywords) {
>            echo "tags: $keywords";
>        }
>    }

Danke! Super -
php-Ausgabepufferung kannte ich noch nicht.



> 
> Da stellt sich aber die Frage, ob das System nicht auch eine Möglichkeit
> bietet abzufragen, ob überhaupt Keywords gesetzt wurden (vielleicht
> has_keywords()), 
konnte habe ich (noch?) nicht finden



> und falls nicht, ob das nicht eine sinnvolle
> Verbesserung wäre, vorausgesetzt, dass dein Anwendungsfall nicht ganz
> untypisch ist.
> 
> (Und es stellt sich eigentlich auch die Frage, warum ein mutmaßlicher
> Getter Ausgabe erzeugt; könnte dann sprechender vielleicht
> print_keywords() heißen.)
> 
> [1] <www.php.net/manual/en/ref.outcontrol.php>
> 

josh

[toc] | [prev] | [standalone]


Back to top | Article view | de.comp.lang.php


csiph-web