Printing variables in PHP the difference between these two methods? - php

I’m learning to program in PHP and I learned that I can print variables with text through different methods but I have a question:
What is the difference between echo $var1 . ' ' . $var2 and echo "{$var1} {$var2}" in PHP? And what to use?
I don’t understand why do we have use curly brackets and even if it is another method what is the difference between the two.
Thank You!

The first method is the concatenation method and is straightforward.
The second method:
you can print variables inside double quotation marks like
echo " $var1 $var2 ";
but what if you want to print something directly b/w, before, or after a variable. e.g:
echo " $var1SomeOtherTextNotFromVariable$var2SomeMoreText ";
PHP will assume that all text as variable until another $ is reached.
To solve this you need to tell PHP where does variable start and end. e.g:
echo " {$var1}SomeOtherTextNotFromVariable{$var2}SomeMoreText ";
Note
Please check Progrock's answer for another benefit of using curly braces.

Per your comment:
No, I know the difference between double quotes and single quotes I just don’t understand why do I need to put curly brackets
You don't "need" curly brackets but they can help in reading your interpolated string.
Please do not do this in your code but consider:
<?php
$hi = 'h';
$hii = 'sh';
echo "$hiie";
Do you get hie or she as the result?
Answer: neither, you get
Notice: Undefined variable: hiie
To fix this then you need to be explicit with one of the following lines:
echo "{$hi}ie"; // hie
echo "{$hii}e"; // she

(Not an answer but worthy of consideration.)
Curlies are useful if you are dealing with arrays:
$foo =
[
'name' => 'Foo',
'age' => 23
];
echo "Name: {$foo['name']}, Age: {$foo['age']}\n";
Output:
Name: Foo, Age: 23
If you omit the curlies you get an error like:
Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in ...

Related

What exactly does $object->{0} do?

I've seen in this answer the code
$tmpNode = parent::addChild($name,null,$namespace);
$tmpNode->{0} = $value;
I'm curious what the ->{0} actually does? Which PHP language construct is this? Does it reference the first property of $tmpNode without using its name?
Update:
I've seen the answers given so far, but I was looking for a reference into the PHP language manual that explains this use of curly braces. When I search in the PHP Manual for curly the only hit is to the page about strings where curly's are only explained in the context of variables and complex expressions. It wasn't clear to me that the language allows curly's around literals.
Curly brackets {} in php are also used to parse complex codes. Take this for example:
$t = 0;
$$t = 5;
echo ${0}; //outputs 5
or this:
${0} = 65;
echo ${0}; //outputs 65
but if you were to try this:
$0 = 65;
echo $0;
you would get:
Parse error: syntax error, unexpected '0' (T_LNUMBER), expecting variable (T_VARIABLE) or '$'
It is the same with object properties:
$obj = new stdClass();
$obj->{1} = "Hello world";
echo $obj->{1}; //outputs "Hello world"
Complex (curly) syntax

What causes this difference of syntax?

Look at the code below
<?php
echo "$_SERVER[HTTP_HOST] <br />";
echo $_SERVER['HTTP_HOST'], "\n\n";
?>
both of the echo statements return the value of HTTP_HOST index from the superglobal array $_SERVER using the same technique? My question is what caused the difference of the syntax? I noticed the following differences:
HTTP_HOST in the first echo statement is not encased in single quotes, it is contrary to the syntax I used in the second echo statement. I get the following error if I encase HTTP_HOST in single quotes for the first echo statement
Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in C:\xampp\htdocs\php-blog\simple-blog\server.php on line 2
Why a comma is needed after ['HTTP_HOST'] in the second echo statement while it is not needed in the first echo statement? I get the following error if I discard this comma.
Parse error: syntax error, unexpected '"\n\n"' (T_CONSTANT_ENCAPSED_STRING), expecting ',' or ';' in C:\xampp\htdocs\php-blog\simple-blog\server.php on line 3
I am new to programming, need guidance, help please.
Thank you!
Your first statement calls echo with only one argument.
The argument is a string which includes a variable.
When doing this you should use brackets to make sure php understands were your variable starts:
echo "{$_SERVER['HTTP_HOST']} <br>";
You could also concatenate strings with a dot:
echo $_SERVER['HTTP_HOST'] . "<br>";
The comma is just another way to write several echos at once:
echo 1, 2;
is the same as
echo 1;
echo 2;
http://php.net/manual/en/function.echo.php
php syntax allows referring to variables inside double-quotes.
for example:
$x = "hello";
echo "$x world";
is similar to:
echo $x . " world";
or
echo $x , " world";
and all will output hello world.
notice that referring to variables inside single-quotes is not allowed, and for this reason
echo '$x world';
is invalid.

What is the different between {$hello}, ${hello} & $hello when use double quotes?

I'm a bit confuse with
$hello = "hello";
echo "Say $hello";
echo "Say {$hello}";
echo "Say ${hello}";
and the output is same Say hello. When should I use {$hello} and ${hello}? and why it cannot be used in single quote?
$animal = 'cat';
echo "I have 14 $animals";
This may lead to problems, thus you will "escape" it
echo "I have 14 ${animal}s";
or
echo "I have 14 {$animal}s";
In single caused variables/expression were never substituted.
Single quoted string will never expand variables in PHP. See:
http://php.net/manual/en/language.types.string.php
for more detail of the string formats in PHP. There are 4 in total (including nowdoc introduced in PHP 5.3). Only double quoted and heredoc string formats cause variables to be expanded.
According to http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing ,
this is a simple syntax:
echo "Say ${hello}";
and this is a curly syntax:
echo "Say {$hello}";
Why does them both output the same? Becaus in PHP you can use variable variables in every place you want. For example:
$var = 'somevar';
$bar = 'var';
echo $$bar; // "somevar", simple variable variable
echo ${$bar}; // "somevar", complex syntax
echo ${bar}; // "var", because {bar} treated as a string constant:
// Notice: Use of undefined constant bar - assumed 'bar'
So, using variable variables syntax ${hello} simply translated to $hello.

Whats the difference between {$var} and $var?

I would like to know when and why should I use {$var}
echo "This is a test using {$var}";
and when (and why) should I use the simple form $var
echo "This is a test using $var";
You would use the latter when a) not accessing an object or array for the value, and b) no characters follow the variable name that could possibly be interpreted as part of it.
http://php.net/manual/en/language.variables.variable.php
In order to use variable variables with arrays, you have to resolve an
ambiguity problem. That is, if you
write $$a[1] then the parser needs to
know if you meant to use $a[1] as a
variable, or if you wanted $$a as the
variable and then the [1] index from
that variable. The syntax for
resolving this ambiguity is: ${$a[1]}
for the first case and ${$a}[1] for
the second.
The brackets allow you to remove ambiguity for the PHP parser in some special cases.
In your case, they are equivalent.
But consider this one:
$foobar = 'hello';
$foo = 'foo';
echo "${$foo . 'bar'}"; // hello
Without the brackets, you will not get the expected result:
echo "$$foo . 'bar'"; // $foo . 'bar'
For clarity purposes, I would however strongly advise against this syntax.
If you write
echo "This is a test using $vars"
You do not get content of $var in result text.
If you write
echo "This is a test using {$var}s";
Everything will be OK.
P.S. It works only with "" but not for ''.
The {} notation is also useful for embedding multi-dimensional arrays in strings.
e.g.
$array[1][2] = "square";
$text = "This $array[1][2] has two dimensions";
will be parsed as
$text = "This " . $array[1] . "[2] has two dimensions";
and you'll end up with the text
This Array[2] has two dimensions
But if you do
$text = "This {$array[1][2]} has two dimensions";
you end up with the expected
This square has two dimensions.

What's the difference between " and ' when creating strings in PHP?

Very basic, but would like to know the difference/security ramifications etc of using " vs. '.
Can someone provide an example that explains when to use each one?
There are a lot of subtle differences, you'll want to read the php documentation to get a lot of the details, but the important detail are:
Double quotes are parsed whereas single quotes are literals.
You can use variables inline with double quotes, but not with single quotes.
There are some catches though:
<?php
$beer = 'Heineken';
echo "$beer's taste is great"; // works; "'" is an invalid character for variable names
echo "He drank some $beers"; // won't work; 's' is a valid character for variable names but the variable is "$beer"
echo "He drank some ${beer}s"; // works
echo "He drank some {$beer}s"; // works
?>
Single quotes are slightly faster.
When a string is enclosed in double quotes, then escape sequences such as \n and variable identifiers such as $var are interpreted.
See the PHP strings manual for specific details and examples.
The biggest one is this. Inside double-quotes, you can include variables, but inside single quotes, the variable name will be literal:
$var1 = "hello";
// this will echo "hello world"
echo "$var1 world";
// this will echo $var1 world
echo '$var1 world';
Using double-quotes becomes extremely useful in a number of situations, expecially when you place {} around the variable names. Here are some examples (certainly others can give you more examples):
// array elements
echo "Element 5 is {$myArray[5]}";
echo "Element 2 subelement 3 is {$myArray[2][3]}";
//
// a dynamic key
$value = "thing";
$someValue = $myArray["some{$value}"]; // returnd $myArray[something]

Categories