Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.php > #4285 > unrolled thread
| Started by | Josh Mehrtens <jom@mail.invalid> |
|---|---|
| First post | 2017-10-07 16:19 +0200 |
| Last post | 2017-10-10 13:34 +0200 |
| Articles | 17 — 5 participants |
Back to article view | Back to de.comp.lang.php
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
| From | Josh Mehrtens <jom@mail.invalid> |
|---|---|
| Date | 2017-10-07 16:19 +0200 |
| Subject | prü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]
| From | "Christoph M. Becker" <cmbecker69@arcor.de> |
|---|---|
| Date | 2017-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]
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Date | 2017-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]
| From | Josh Mehrtens <jom@mail.invalid> |
|---|---|
| Date | 2017-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]
| From | "Christoph M. Becker" <cmbecker69@arcor.de> |
|---|---|
| Date | 2017-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]
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Date | 2017-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]
| From | Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) |
|---|---|
| Date | 2017-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]
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Date | 2017-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]
| From | "Christoph M. Becker" <cmbecker69@arcor.de> |
|---|---|
| Date | 2017-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]
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
|---|---|
| Date | 2017-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]
| From | "Christoph M. Becker" <cmbecker69@arcor.de> |
|---|---|
| Date | 2017-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]
| From | k@rl.pflaesterer.de (Karl Pflästerer) |
|---|---|
| Date | 2017-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]
| From | "Christoph M. Becker" <cmbecker69@arcor.de> |
|---|---|
| Date | 2017-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]
| From | "Christoph M. Becker" <cmbecker69@arcor.de> |
|---|---|
| Date | 2017-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]
| From | Josh Mehrtens <jom@mail.invalid> |
|---|---|
| Date | 2017-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]
| From | "Christoph M. Becker" <cmbecker69@arcor.de> |
|---|---|
| Date | 2017-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]
| From | Josh Mehrtens <jom@mail.invalid> |
|---|---|
| Date | 2017-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