|
użytkowników online: 26
|
OPINIE UŻYTKOWNIKÓW
|
Porady zamieszczone tutaj przez Darka są pomocne w wielu chwilach. Wielokrotnie tworząc jakiś złożony serwis korzystam z tych porad. Można by tworzyć samemu te skrypty, ale tak naprawdę czy nie lepiej jest wziąć skrypt z tej strony i zmodyfikowac go dla swoich potrzeb? Wprawdzie możemy taki skrypt napisać sami, ale po co, skoro stracimy czas na coś, co ktoś juz napisał, przetestował i może zagwarantować, że działa poprawnie. Któryś raz z rzędu opłacam abonament i nie raz jeszcze opłacę. Kawał dobrej roboty i ogrom wiedzy w jednym miejscu.
Piotr Karamański Design Studio
|
|
PODRĘCZNIK PHP 5.x, 4.x, 3.x - częściowo spolszczony / źródło: www.php.net
[Spis]
[A]
[B]
[C]
[D]
[E]
[F]
[G]
[H]
[I]
[J]
[K]
[L]
[M]
[N]
[O]
[P]
[Q]
[R]
[S]
[T]
[U]
[V]
[X]
[W]
[Z]
Typ string oznacza łańcuch znaków. W PHP znak jest tym sam co
bajt, co oznacza, że jest możliwych 256 różnych znaków. Oznacza to także,
że PHP nie posiada żadnej wbudowanej obsługi Unikodu.
Notatka:
Nie ma technicznych problemów, które utrudniałyby tworzenie bardzo długich
ciągów znaków. Nie ma też ustalonej maksymalnej długości łańcuchów znaków
obsługiwanych w PHP, więc nie ma powodu do obaw, że dany łańcuch jest zbyt
długi.
Łańcuch znaków można utworzyć na trzy sposoby.
Najprostszym sposóbem na zdefiniowanie prostego łańcucha znaków, jest
umieszczenie go w pojedynczych cudzysłowach (znak ').
Aby w takim łańcuch umieścić symbol pojedynczego cudzysłowu, należy go
poprzedzić ukośnikiem wstecznym (\), tak jak w wielu
innych językach programowania. Jeśli ukośnik wsteczny ma wystąpić przed
symbolem pojedynczego cudzysłowu lub na końcu łańcucha, wtedy należy
napisać go dwukrotnie. W przypadku użycia ukośnika wstecznego z innym
znakiem, ukośnik też zostanie wyświetlony! Nie ma zatem potrzeby pisania
ukośnika dwukrotnie w innych sytuacjach.
Notatka:
W PHP 3, ostrzeżenie na poziomie E_NOTICE zostanie
wyświetlone, jeśli zajdzie powyższa sytuacja.
Notatka:
W przeciwieństwie do dwóch pozostałych składni, zmienne
nie będą zamienione na swoje wartości, kiedy
pojawią się pomiędzy pojedynczymi cudzysłowami.
Kiedy łańcuch znaków jest umieszczony pomiędzy podwójnymi cudzysłowami,
PHP interpretuje więcej sekwencji cytowania dla znaków specjalnych:
Tabela 11-1. Znaki cytowane (specjalne) | sekwencja | znaczenie |
|---|
| \n | nowa linia (LF lub 0x0A (10) w ASCII) | | \r | powrót karetki (CR lub 0x0D (13) w ASCII) | | \t | tabulacja pozioma (HT lub 0x09 (9) w ASCII) | | \\ | odwrotny ukośnik | | \$ | znak dolara | | \" | cudzysłów podwójny | | \[0-7]{1,3} |
sekwencja znaków pasująca do powyższego wyrażenia regularnego daje
znak zapisany w notacji ósemkowej
| | \x[0-9A-Fa-f]{1,2} |
sekwencja znaków pasująca do powyższego wyrażenia regularnego daje
znak zapisany w notacji szesnastkowej
|
Tak jak w poprzedniej składni, zapisanie ukośnika wstecznego przed
każdym innymi znakiem spowoduje wyświetlenie zarówno ukośnika, jak i
znaku.
Ale najważniejszą właściwością podwójnych cudzysłowów jest to, że zapisane
w nich zmienne zostaną zamienione na ich wartości. Więcej informacji
w rozdziale parsowanie
łańcuchów znaków.
Jeszcze jednym sposobem na zapisanie łańcucha znaków jest użycie skladni
heredoc ("<<<"). Po operatorze <<<
powinno się umieścić identyfikator i takim samym identyfikatorem trzeba
zakończyć łańcuch znaków.
Identyfikator zamykający musi zaczynać się w
pierwszej kolumnie nowej linii. Identyfikator musi też podlegać regułom
nazewnictwa w PHP: musi się składać wyłącznie z alfanumerycznych znaków
oraz znaku podkreślenia i musi zaczynać się od litery lub znaku
podkreślenia.
| Ostrzeżenie |
Ważne by pamiętać, że linia zawierająca identyfikator zamykający nie
może zawierać żadnych innych znaków, z wyjątkiem
średnika (;). Znaczy to przede wszystkim, że
identyfikator zamykający nie może być wcinany,
i nie może być żadnych spacji ani tabulacji przed lub za średnikiem.
Najbardziej dokuczliwym ograniczeniem jest to, że wewnątrz tego łańcucha
znaków nie może być znaku powrotu karetki (\r) na
końcu linii, jedynie znak nowej linii (\n).
Ponieważ Microsoft Windows używa jako znaku końca linii sekwencji
\r\n, łańcuchy znaków zapisne w składni heredoc
mogą nie działać, jeśli skrypt zostanie napisany w edytorze windowsowym.
Na szczęście większość edytorów tekstowych udostępnia możliwość zapisania
pliku w uniksowym formacie końca linii.
|
Składnia heredoc zachowuje się podobnie jak tekst w cudzysłowach
podwójnych. Oznacza to też, ze nie ma potrzeby cytowania cudzysłowów w tej
składni, ale nadal można używać znaków cytowanych, opisanych powyżej.
W tej składni nazwa zmiennej zamieniana jest na jej wartość, ale należy
zachować ostrożność przy zapisie złożonych zmiennych razem z tekstem.
Przykład 11-2. Przykład składni heredoc |
<?php
$str = <<<EOD
Przykład łańcucha znaków,
zajmującego kilka linii,
zapisanego w składni heredoc.
Przykładowe zastosowanie w przezentacji liryki.
Litwo! Ojczyzno moja! ty jesteś jak zdrowie;
Ile cię trzeba cenić, ten tylko się dowie,
Kto cię stracił. Dziś piękność twą w całej ozdobie
Widzę i opisuję, bo tęsknię po tobie.
\tAdam Mickiewicz - Pan Tadeusz
EOD;
class foo
{
var $foo;
var $bar;
function foo()
{
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}
$foo = new foo();
$name = 'MojeImię';
echo <<<EOT
Nazywam się "$name". Wyświetlam $foo->foo.
A teraz wyświetlam z tablicy: {$foo->bar[1]}.
Po dwukropku powinien pojawić się znak 'A': \x41
EOT;
?>
|
|
Notatka:
Obsługa składni heredoc została dodana w PHP 4.
Kiedy łańcuch znaków jest zapisany w cudzysłowach podwójnych lub w składni
heredoc, zawarte w nim nazwy zmiennych są parsowane, tzn.
zamieniane na ich wartości.
Są dwa rodzaje składni,
prosta
i
złożona.
Składnia prosta jest najbardziej popularna i najwygodniejsza, pozwala
na parsowanie zmiennej, wartości z tablicy oraz właściwości obiektu.
Składnia złożona pojawiła się w PHP 4, i można ją rozpoznać po nawiasach
klamrowych, otaczających wyrażenie.
Jeśli wewnątrz zmiennej pojawi się znak dolara ($),
parser pobierze tyle znaków, ile tylko się da, aby utworzyć poprawną
nazwę zmiennej. Aby jawnie określić koniec nazwy zmiennej, należy ją
zapisać w klamrach.
Podobnie działa parsowanie elementu tablicy lub właściwości obiektu.
Dla tablic, prawy nawias prostokątny (]) oznacza
koniec indeksu. Dla właściwości obiektu obowiązują te same reguły
jak dla zwykłych zmiennych, jednak nie działają tu opisane powyżej
sztuczki ze zmiennymi.
Do wyrażeń bardziej skomplikowanych należy używać składni złożonej.
Nazwa tej składni nie pochodzi od skomplikowanego zapisu, tylko od
możliwości obsługi bardziej złożonych wyrażeń.
Za pomocą tej składni można umieszczać w łańcuchach znaków każdą wartość
istniejącą w przestrzeni nazw. Odpowiednie wyrażenie pisze się tak, jakby
miało ono znajdować się gdziekolwiek poza łańcuchem znaków, a potem tylko
umieszcza się je między { i }. Ponieważ nie można cytować "{", składnia
ta będzie prawidłowo rozpoznana tylko wtedy, kiedy $ znajduje się
bezpośrednio za {. (Użyj "{\$" lub "\{$" aby uzyskać "{$"). Poniżej kilka
przykładów:
Dostęp do pojedynczego znaku łańcucha jest możliwy po podaniu jego
indeksu (ofsetu) w nawiasach klamrowych, zaraz po nazwie zmiennej.
Pierwszy znak w łańcuchu ma indeks zero.
Notatka:
Dla zachowania kompatybilności wstecznej, nadal można używać nawiasów
kwadratowych, jednak składnia ta w PHP 4 uznana jest za przestarzałą.
Przykład 11-3. Przykłady używania łańcuchów znaków |
<?php
$str = "To jest łańcuch znaków";
$str = $str . " a to jego dalsza część";
$str .= " wraz ze znakiem nowej linii na końcu.\n";
$num = 9;
$str = "<p>Liczba: $num</p>";
$num = 9;
$str = '<p>Liczba: $num</p>';
$str = 'To jest przykład.';
$pierwszy = $str{0};
$str = 'Dalsza część przykładu.';
$ostatni = $str{strlen($str)-1};
?>
|
|
Łańcuchy znaków łączy się za pomocą operatora '.' (kropka). Proszę
pamiętać, że operator dodawania '+' nie wykonuje operacji łączenia
łańcuchów. Więcej informacji w rozdziale
operatory łańcuchowe.
PHP posiada mnóstwo funkcji operujących na łańcuchach znaków.
Najwięcej na ten temat w rozdziale
funkcje łańcuchowe. Poza tym obsługiwane
są wyrażenia regularne dla potrzeb zaawnsowanych operacji znajdź i zamień
(w dwóch odmianach: Perl oraz
POSIX extended).
Są także funkcje obsługi łańcuchów URL,
jak również funkcje szyfrowania i deszyfrowania łańcuchów
(mcrypt oraz
mhash).
Jeśli nadal nie znalazłeś tego, czego potrzebujesz, być może pomogą
ci funkcje kontroli typu znaków.
Jeśli łańcuch znaków jest konwertowany na postać liczbową, rezultat
konwersji będzie zależał od poniższych czynników.
Łańcuch zostanie skonwertowany do typu float, jeśli zawiera
znaki ".", "e" lub "E". W przeciwnym razie zostanie skonwertowany do typu
integer.
Wartość liczbowa łańcucha znaków zależy od pierwszych znaków tego
łańcucha. Jeśli łańcuch zaczyna się od poprawnej wartości liczbowej,
wartość ta będzie używa przy konwersji. W przeciwnym razie zwrócona będzie
wartość 0 (zero). Poprawna wartość liczbowa zaczyna się od opcjonalnego
znaku, po którym znajduje się jedna, lub kilka cyfr (opcjonalnie
zawierające przecinek dziesiętny), po którym opcjonalnie znajduje się
eksponent. Eksponent jest to znak "e" lub "E", po którym następuje jedna,
lub więcej cyfr.
Kiedy pierwszym wyrażeniem jest łańcuch znaków, typ zmiennej będzie zależał
od drugiego wyrażenia.
Więcej informacji na temat tej konwersji znajduje się w podręczniku Uniksa,
na stronie polecenia strtod(3).
Jeśli chciałbyś przetestować któryś z przykładów w tym rozdziale, możesz
je skopiować i wkleić, a następnie dodać poniższą linię i obserwować
rezultaty.
User Contributed Notesadam at obledesign dot com
21-Jan-2006 09:51
If you really want to get constants inside your string you can do something like this (PHP5 only).
<?php
class GetConstant {
public function __get($constant_name) {
return (defined($constant_name) ? constant($constant_name) : NULL);
}
}
$C = new GetConstant();
define('FOO','bar');
echo("I want a candy {$C->FOO}.");
?>
csaba at alum dot mit dot edu
31-Dec-2005 12:15
Multiline strings:
In most of the strings on this doc page, the heredoc form (<<<) is not needed. The heredoc form is useful when you also want to embed, without escaping, quotes of the same type as the starting quote. The single quote form is particularly useful when you want to specify multiline code for future evaluation.
<?php
$code = '
$output = "Mutliline output";
$out = "$output within multiline code:
$ needs escaping within \$out,
and double quotes (\") need escaping within \$out,
but single quotes (\') need escaping everywhere.";
// Next two lines work with php.exe
/* on Windows systems */
$oWSH = new COM("WScript.Shell");
$oWSH->Popup($out, 4, \'IO Demo\', 131120);
';
print "<pre>$code</pre>";
call_user_func (create_function('', $code));
?>
Happy New Year,
Csaba Gabor from Vienna
19-Dec-2005 03:10
RE www.feisar.de
<?php
$x1 = '111111111111111111';
$x2 = '111111111111111112';
echo ($x1 == $x2) ? "true\n" : "false\n";
?> // prints true;
You are right about need to use === to force a string to string comparison.
However as the number exceed the 32 bit range PHP is comparing the floating point not the integer values.
Both have a float values of 1.11111111111E+017
wilkinson98 at hotmail dot com
17-Dec-2005 02:53
You can't depend on hex in strings to be converted.
<?php
echo 1 + '0x10';
echo (int) '0x10';
?>
Alex
09-Dec-2005 08:24
For heredocs, the manual is accurate. Many other descriptions on the web are not.
PHP always tries to evaluate variables. So if you want a $ sign, it always needs to be escaped or in complex format, depending on the context. This is especially important if you are trying to do an eval().
<?php
$foo = 1;
$code = <<<CODE
$bar = $foo;
CODE;
eval ($code); ?>
<?php
$foo = 1;
$code = <<<CODE
\$bar = \$foo;
CODE;
eval ($code); ?>
<?php
$foo = 1;
$code = <<<CODE
\$bar = {$foo};
CODE;
eval ($code); ?>
<?php
$foo = 1;
$code = <<<CODE
{$bar} = {$foo};
CODE;
eval ($code); ?>
webmaster at rephunter dot net
30-Nov-2005 05:57
Use caution when you need white space at the end of a heredoc. Not only is the mandatory final newline before the terminating symbol stripped, but an immediately preceding newline or space character is also stripped.
For example, in the following, the final space character (indicated by \s -- that is, the "\s" is not literally in the text, but is only used to indicate the space character) is stripped:
$string = <<<EOT
this is a string with a terminating space\s
EOT;
In the following, there will only be a single newline at the end of the string, even though two are shown in the text:
$string = <<<EOT
this is a string that must be
followed by a single newline
EOT;
DELETETHIS dot php at dfackrell dot mailshell dot com
01-Nov-2005 05:05
Just some quick observations on variable interpolation:
Because PHP looks for {? to start a complex variable expression in a double-quoted string, you can call object methods, but not class methods or unbound functions.
This works:
<?php
class a {
function b() {
return "World";
}
}
$c = new a;
echo "Hello {$c->b()}.\n"
?>
While this does not:
<?php
function b() {
return "World";
}
echo "Hello {b()}\n";
?>
Also, it appears that you can almost without limitation perform other processing within the argument list, but not outside it. For example:
<?
$true = true;
define("HW", "Hello World");
echo "{$true && HW}";
?>
gives: Parse error: parse error, unexpected T_BOOLEAN_AND, expecting '}' in - on line 3
There may still be some way to kludge the syntax to allow constants and unbound function calls inside a double-quoted string, but it isn't readily apparent to me at the moment, and I'm not sure I'd prefer the workaround over breaking out of the string at this point.
php at simoneast dot NOSPAM dot net
12-Sep-2005 12:17
Be ULTRA careful when multiplying numbers like '1,000'. If it's a string with a thousands separator like that, PHP ignores everything after the comma.
<?
echo "2,500" * 2; echo "20,50" * 2; echo "2,500.00" * 2; is_numeric("2,500"); ?>
I was developing a shopping cart, and had items worth over $1,000 advertised as $1! Luckily we realised before launch.
Don
29-Aug-2005 03:24
diannes at dbfields dot com
21-Jun-2005 10:41
I was trying to perform a series of manipulations on a string and found that there doesn't seem to be any easy way to force variable expansion to occur if a string hadn't originally been created as double-quoted or heredoc. Maybe there's an easier workaround than the one below, but it's what I ended up doing.
-------------------------------
$var = '5';
$str = "var = $var ";
echo $str; // prints 'var = "5" ' (expected result)
$str = 'var = "$var" ';
echo $str; // prints 'var = "$var" ' (expected result)
// NO VARIABLE EXPANSION:
$str = 'var = "$var" ';
echo $str; // prints 'var = "$var" '
echo "$str"; // prints 'var = "$var" '
$str = "$str";
echo $str; // still prints 'var = "$var" '
$str = (string)$str;
echo $str; // still prints 'var = "$var" '
$str = strval($str);
echo $str; // still prints 'var = "$var" '
// NO VARIABLE EXPANSION THIS WAY EITHER:
$str = 'var = "{$var}" ';
// yields similar results to above
// NO VARIABLE EXPANSION WHEN STRING IS FROM A FILE
$str = implode("",file("foo"));
echo $str; // prints 'var = "$var" '
// THIS WILL FORCE VARIABLE EXPANSION TO OCCUR:
$str = str_replace('"','\"',$str); // escape double quotes
echo eval('echo "'.$str.'";'); // prints 'var = "5" '
$str = 'ob_start(); echo "'.$str.'"; ob_get_contents();';
$str = eval($str);
echo $str; // prints 'var = "5" '
nutbar at innocent dot com
08-Jun-2005 06:10
A correction to skippy's comment:
"...you can use either ${ or {$ to open the curly expression ie. "${var}" and "{$var}" are equivalent."
Is incorrect.
For simple variables, such as in the example quoted yes both function and yeild the expected result. However, when dealing with array variables like $array['key'], doing "${array['key']}" will yeild errors or unexpected results. The correct formatting is "{$array['key']}".
shadda at gmail dot com
25-Jan-2005 01:39
It's fun to use heredoc syntax in conjunction with sprintf, and quite effective in my opinion.
sprintf(<<<EOS
The dog ran over the %s,
and landed on the %s
EOS
,'cat','floor');
Dunno if anyone else likes this method, but Its certainly usefull for constructing long verbose SQL statements.
Cheers.
lelon at lelon dot net
27-Oct-2004 09:01
You can use the complex syntax to put the value of both object properties AND object methods inside a string. For example...
<?php
class Test {
public $one = 1;
public function two() {
return 2;
}
}
$test = new Test();
echo "foo {$test->one} bar {$test->two()}";
?>
Will output "foo 1 bar 2".
However, you cannot do this for all values in your namespace. Class constants and static properties/methods will not work because the complex syntax looks for the '$'.
<?php
class Test {
const ONE = 1;
}
echo "foo {Test::ONE} bar";
?>
This will output "foo {Test::one} bar". Constants and static properties require you to break up the string.
bishop
10-Sep-2004 12:47
Re: Jonathan Lozinski's note on vim syntax highlighting, we use EOHTML, EOSQL, and EOJAVASCRIPT quite frequently for HTML, SQL, and JavaScript, respectively.
eg:
<?php
$query =<<<EOSQL
SELECT Foo.a,
Foo.b,
Bar.a
FROM Foo
LEFT
JOIN Bar
ON Foo.x=Bar.y
WHERE Foo.b LIKE '%123%'
EOSQL;
?>
will be highlighted correctly for SQL under VIM.
Jonathan Lozinski
06-Aug-2004 09:03
A note on the heredoc stuff.
If you're editing with VI/VIM and possible other syntax highlighting editors, then using certain words is the way forward. if you use <<<HTML for example, then the text will be hightlighted for HTML!!
I just found this out and used sed to alter all EOF to HTML.
JAVASCRIPT also works, and possibly others. The only thing about <<<JAVASCRIPT is that you can't add the <script> tags.., so use HTML instead, which will correctly highlight all JavaScript too.. There might be one for Text/css too?
skippy zuavra net
20-Jul-2004 05:55
The short version for the curly syntax:
1. $str{something} is the equivalent of $str[something]
2. Inside "" strings you can use any variable, no matter how complex the addressing mode (multiple index array, imbricated objects) by enclosing the variable in {}: "foo{$any_variable}bar".
To add to the confusion:
a) The two uses above have nothing in common, conceptually. For instance, #1 can use operations or functions as that something, #2 is restricted to just variables.
b) In #2, you can use either ${ or {$ to open the curly expression ie. "${var}" and "{$var}" are equivalent.
rtb27 at cam dot ac dot uk
30-Jun-2004 04:59
If you want side effects to occur during variable substituion inside strings, the "?" operator can help. For example:
<?php
$i = 0;
echo <<<LONGSTRING
one {${$i++ ? "i" : "i"}}
two {${$i++ ? "i" : "i"}}
three {${$i++ ? "i" : "i"}}
LONGSTRING;
?>
will print: "one 1 two 2 three 3"
www.feisar.de
28-Apr-2004 04:49
watch out when comparing strings that are numbers. this example:
<?php
$x1 = '111111111111111111';
$x2 = '111111111111111112';
echo ($x1 == $x2) ? "true\n" : "false\n";
?>
will output "true", although the strings are different. With large integer-strings, it seems that PHP compares only the integer values, not the strings. Even strval() will not work here.
To be on the safe side, use:
$x1 === $x2
atnak at chejz dot com
12-Apr-2004 12:53
Here is a possible gotcha related to oddness involved with accessing strings by character past the end of the string:
$string = 'a';
var_dump($string{2}); // string(0) ""
var_dump($string{7}); // string(0) ""
$string{7} === ''; // TRUE
It appears that anything past the end of the string gives an empty string.. However, when E_NOTICE is on, the above examples will throw the message:
Notice: Uninitialized string offset: N in FILE on line LINE
This message cannot be specifically masked with @$string{7}, as is possible when $string itself is unset.
isset($string{7}); // FALSE
$string{7} === NULL; // FALSE
Even though it seems like a not-NULL value of type string, it is still considered unset.
zefram at cesena dot net
30-Mar-2004 02:04
Make attention to string conversion!
Strings may evaluate to true but also to zero!!
<?
$hello='hi there';
echo($hello?'true':'false'); echo($hello==0?'true':'false'); echo($hello===0?'true':'false'); ?>
maka3d at yahoo dot com dot br
26-Feb-2004 07:46
Remember that even PHP is type less, some convertions like INTEGER to STRING is not done when using character direct access like string functions does.
<?php
$str = '456';
echo strlen($str); echo $str{0}; $str = 456;
echo $str{0}; $str = (string)$str; echo $str{1}; ?>
gijs at dghostingworld dot com
23-Feb-2004 08:18
If you use the heredoc syntax and you want to insert an function that echo's something use the following escape sequence: {${header('This is text', 'color')}}
This will execute the function.
hope this helps somebody.
G
marcus at synchromedia dot co dot uk
25-Jan-2004 12:41
If you need to output a string that contains the 'end of php' sequence ?>, or perhaps you have trouble with your editor's syntax colouring because of it, for instance if you wish to do this:
<?php
print "<?xml version=\"1.0\"?>\n";
?>
you can instead use an encoded char to remove the confusion:
<?php
print "<?xml version=\"1.0\"\x3F>\n";
?>
Note that this notes page doesn't have a problem with this syntax!
dandrake
20-Jan-2004 12:41
By the way, the example with the "\n" sequence will insert a new line in the html code, while the output will be decided by the HTML syntax. That's why, if you use
<?
echo "Hello \n World";
?>
the browser will receive the HTML code on 2 lines
but his output on the page will be shown on one line only.
To diplay on 2 lines simply use:
<?
echo "Hello <br>World";
?>
like in HTML.
mina86 at tlen dot pl
25-Dec-2003 08:00
Re: reuterpl at wp dot pl
No, that's not true.. I mean not exactly true gowever I know what you meant but begginers may not know and feal confused..
<?php
$str = "Hello \n World";
echo($str);
echo('<pre>' . $str . '</pre>');
$str = nl2br($str);
echo($str);
echo('<pre>' . $str . '</pre>');
?>
Re: cs_1 at gmx dot de
I use only UNIX line ends an have no problems with heredoc syntax, so maybe your problem was with something else..
dev6 at es11 dot com
28-Aug-2003 09:42
In response to the most recent post, by Edwin: Huh?
First, $foo is not NULL terminated, it's newline terminated. NULL and \n are not even remotely the same thing.
Second, the example you posted works perfectly. Both values get computed and printed as 3.0, not 2.0.
edwin at se-technology dot com
06-Jun-2003 11:58
This one took me a while to sort out:
$foo = "1.5\n";
$bar = "1.5";
printf ("%6.2f, %6.2f ", $foo*2, $bar*2);
>> 2.0, 3.0
So apparently string conversion is messed up by NULL, an obvious solution in case you happen to have a NULL terminated string is:
$foo = rtrim ($foo);
gmarik at hotbox dot ru
24-Apr-2003 08:57
This is how I did it, if tou need to cut big text blocks in easy to browse text blocks:
$str = "bla bla nla. asdfasd. fdsfd fafsasf. asasdwe fdscz asdvc. afasffas. afafs vcxrqw cvea.";
preg_match_all("/.{1500,}?\./s",$str,$out,PREG_PATTERN_ORDER);
list($out) = $out;
print_r($out);
And this is the dynamic menu to navigate between the blocks:
for ($i=0; $i<count($out); $i++) {
$pgnum = $i+1;
echo "<option value=$pgnum>$pgnum</option>";
}
philip at cornado dot com
12-Apr-2003 02:37
Note that in PHP versions 4.3.0 and 4.3.1, the following provides a bogus E_NOTICE (this is a known bug):
echo "$somearray['bar']";
This is accessing an array inside a string using a quoted key and no {braces}. Reading the documention shows all the correct ways to do this but the above will output nothing on most systems (most have E_NOTICE off) so users may be confused. In PHP 4.3.2, the above will again yield a parse error.
03-Mar-2003 07:04
Regarding "String access by character":
Apparently if you edit a specific character in a string, causing the string to be non-continuous, blank spaces will be added in the empty spots.
echo '<pre>';
$str = '0123';
echo "$str\n";
$str{4} = '4';
echo "$str\n";
$str{6} = '6';
echo "$str\n";
This will output:
0123
01234
01234 6
Notice the blank space where 5 should be.
(PHP 4.3.1)
cs_1 at gmx dot de
11-Feb-2003 09:57
Be sure to save your PHP files with CrLf line ends when using the heredoc syntax for a variable, e.g.:
$var1 = <<<EOT
sdsdsd
EOT;
didn't work on my linux system when using unix line ends...
Jeff at jsgennusa at yahoo dot com
24-Jan-2003 08:28
This is why this is right:
$beer = 'Heineken';
echo "$beer's taste is great"; // works, "'" is an invalid character for varnames
echo "He drank some $beers"; // won't work, 's' is a valid character for varnames
echo "He drank some ${beer}s"; // works
In all these examples, the php code is looking for the variable $beer.
In the first one, it works because when it finds $beer's it actually finds $beer and stops at the '.
In the second one, it doesn't work because there is no variable designated as $beers.
The third one works because the php code reads { and } as specifying what the actually variable is that it should be looking for. The { and } allow you to add onto the variable.
jm at roth dot lu
18-Jan-2003 04:09
ERRATA?
Shouldn't this :
echo "$beer's taste is great"; // works, "'" is an invalid character for varnames
echo "He drank some $beers"; // , 's' is a valid character for varnames
echo "He drank some ${beer}s"; // works
be like that:
echo "$beer's taste is great"; // won't work, "'" is an invalid character for varnames
echo "He drank some $beers"; // works, 's' is a valid character for varnames
echo "He drank some ${beer}s"; // works
vallo at cs dot helsinki dot fi
04-Nov-2002 02:41
Even if the correct way to handle variables is determined from the context, some things just doesn't work without doing some preparation.
I spent several hours figuring out why I couldn't index a character out of a string after doing some math with it just before. The reason was that PHP thought the string was an integer!
$reference = $base + $userid;
.. looping commands ..
$chartohandle = $reference{$last_char - $i};
Above doesn't work. Reason: last operation with $reference is to store a product of an addition -> integer variable. $reference .=""; (string catenation) had to be added before I got it to work:
$reference = $base + $userid;
$reference .= "";
.. looping commands ..
$chartohandle = $reference{$last_char - $i};
Et voil
|