In PHP, how can you have quotes around a variable like this? - php

I saw this code snippet somewhere, wordpress related stuff:
$theme_root = get_theme_root();
$files_array = glob("$theme_root/*", GLOB_ONLYDIR);
It's the "$theme_root/*" part I don't understand. Why quotes around variables?
Why wouldn't the code above instead be written like this:
$theme_root = get_theme_root();
$files_array = glob($theme_root . "/*", GLOB_ONLYDIR);

"Because it works" is a dangerously common reason for doing things in PHP... In this case, it's no big deal, but in other places this principle can be very dangerous.
Anyway, optimally, it should be:
$theme_root . '/*'
Note the use of single-quotes - these are faster to parse because PHP doesn't have to look for variable to interpolate or escape sequences to handle.
That said, however, "fixes" like this are basically micro-optimisation and not something you should dedicate time to.

When you use double quotes, PHP tries to interpret variables inside the string
$test = 'aaa';
echo "test:$test"; //returns 'test:aaa';
echo 'test:$test'; //returns 'test:test';
This syntax could be interesting because it is quite clear, but it is slower if you don't use variables inside the string :
echo "aaaaaaaaaaaaaaaaaa"; //slower
echo 'aaaaaaaaaaaaaaaaaa'; //faster

Related

Save data in session laravel using loop [duplicate]

I am wondering, What is the proper way for inserting PHP variables into a string?
This way:
echo "Welcome ".$name."!"
Or this way:
echo "Welcome $name!"
Both of these methods work in my PHP v5.3.5. The latter is shorter and simpler but I'm not sure if the first is better formatting or accepted as more proper.
Between those two syntaxes, you should really choose the one you prefer :-)
Personally, I would go with your second solution in such a case (Variable interpolation), which I find easier to both write and read.
The result will be the same; and even if there are performance implications, those won't matter 1.
As a sidenote, so my answer is a bit more complete: the day you'll want to do something like this:
echo "Welcome $names!";
PHP will interpret your code as if you were trying to use the $names variable -- which doesn't exist.
- note that it will only work if you use "" not '' for your string.
That day, you'll need to use {}:
echo "Welcome {$name}s!"
No need to fallback to concatenations.
Also note that your first syntax:
echo "Welcome ".$name."!";
Could probably be optimized, avoiding concatenations, using:
echo "Welcome ", $name, "!";
(But, as I said earlier, this doesn't matter much...)
1 - Unless you are doing hundreds of thousands of concatenations vs interpolations -- and it's probably not quite the case.
Double-quoted strings are more elegant because you don't have to break up your string every time you need to insert a variable (like you must do with single-quoted strings).
However, if you need to insert the return value of a function, this cannot be inserted into a double-quoted string--even if you surround it with braces!
//syntax error!!
//$s = "Hello {trim($world)}!"
//the only option
$s = "Hello " . trim($world) . "!";
Since php4 you can use a string formater:
$num = 5;
$word = 'banana';
$format = 'can you say %d times the word %s';
echo sprintf($format, $num, $word);
Source: sprintf()
I prefer this all the time and found it much easier.
echo "Welcome {$name}!"
From the point of view of making thinks simple, readable, consistent and easy to understand (since performance doesn't matter here):
Using embedded vars in double quotes can lead to complex and confusing situations when you want to embed object properties, multidimentional arrays etc.
That is, generally when reading embedded vars, you cannot be instantly 100% sure of the final behavior of what you are reading.
You frequently need add crutches such as {} and \, which IMO adds confusion and makes concatenation readability nearly equivalent, if not better.
As soon as you need to wrap a function call around the var, for example htmlspecialchars($var), you have to switch to concatenation.
AFAIK, you cannot embed constants.
In some specific cases, "double quotes with vars embedding" can be useful, but generally speaking, I would go for concatenation (using single or double quotes when convenient)
I know this question already has a chosen answer, but I found this article that evidently shows that string interpolation works faster than concatenation. It might be helpful for those who are still in doubt.
Either one is fine. Use the one that has better visibility for you. And speaking of visibility you can also check out printf.
I use a dot(.) to concate string and variable. like this-
echo "Hello ".$var;
Sometimes, I use curly braces to concate string and variable that looks like this-
echo "Hello {$var}";
Do not concatenate. It's not needed, us commas as echo can take multiple parameters
echo "Welcome ", $name, "!";
Regarding using single or double quotes the difference is negligible, you can do tests with large numbers of strings to test for yourself.
Go with the first and use single quotes!
It's easier to read, meaning other programmers will know what's happening
It works slightly faster, the way opcodes are created when PHP dissects your source code, it's basically gonna do that anyway, so give it a helping hand!
If you also use single quotes instead of double quotes you'll boost your performance even more.
The only situations when you should use double quotes, is when you need \r, \n, \t!
The overhead is just not worth it to use it in any other case.
You should also check PHP variable concatenation, phpbench.com for some benchmarks on different methods of doing things.
It only matter of taste.
Use whatever you wish.
Most of time I am using second one but it depends.
Let me suggest you also to get yourself a good editor which will highlight a variable inside of a string
You Should choose the first one. They have no difference except the performance the first one will be the fast in the comparison of second one.
If the variable inside the double quote PHP take time to parse variable.
Check out this Single quotes or double quotes for variable concatenation?
This is another example Is there a performance benefit single quote vs double quote in php?
I did not understand why this answer in above link get upvoted and why this answer got downvote.
As I said same thing.
You can look at here as well
What is faster in PHP, single or double quotes?
I know this is an old question, but I think someone has to mention all pros & cons:
Better Syntax: That's personal preference.
Performance: No difference. As many mentioned, double-quote might be faster if using unrealistically many variables.
Better Usage: Single quote (mostly). As #Khez said, with single quote you can concatenate anything, even function calls and variable modification, like so: echo 'hi ' . trim($name) . ($i + 1);. The only thing double-quote can do that single-quote cannot do is usage of \n, \r, \t and alike.
Readability: No difference (may personal preference apply).
Writability/Re-Writability/Debugging: In 1-line statements there is no difference, but when dealing with multiple lines, it's easier to comment/uncomment lines while debugging or writing. For example:
$q = 'SELECT ' .
't1.col1 ' .
',t2.col2 ' .
//',t3.col3 ' .
'FROM tbl1 AS t1 ' .
'LEFT JOIN tbl2 AS t2 ON t2.col2 = t1.col1 ' .
//'LEFT JOIN tbl3 AS t3 ON t3.col3 = t2.col2 ' .
'WHERE t1.col1 = ' . $x . ' ' .
' AND t2.col2 = ' . $y . ' ' .
//' AND t3.col3 = ' . $z . ' ' .
'ORDER BY t1.col1 ASC ' .
'LIMIT 10';
Less Escaping: Single-quote. For single quote you need to escape 2 characters only (' and \). For double quote you need to escape 2 characters (", \) and 3 more if required ($, { and }).
Less Changes: Single quote. For example if you have the following code:
echo 'Number ' . $i . '!';
And you need to increment 1 to $i, so it becomes likes:
echo 'Number ' . ($i + 1) . '!';
But for double quote, you will need to change this:
echo "Number $i!";
to this:
echo "Number " . ($i + 1) . "!";
Conclusion: Use what you prefer.
If you want to execute a SQL command and your variables are array members, then you should not use single quotes inside [] of array (like this: ['']); for example if you use this string as a SQL command, you get server error 500:
$con = mysqli_connect('ServerName', 'dbUsername', 'dbPassword');
mysqli_select_db($con, 'dbName')
//'ID' is auto increment field.
$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray['TraceNo']')";
mysqli_query($con, $sql)
The correct string is:
//'ID' is auto increment field.
$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray[TraceNo]')";
echo "Welcome $name!";
This is the best way.
You don't need to anything else

What's the difference between "string" .$var and "string $var" in php?

In preparing MySQL statements in PHP, I came across lines of codes like this:
$somequery = "some query '$var'";
Where $var is a variable containing a string.
What is the difference with the statement using the string concatenating operator .?
$somequery = "some query " . $var;
The result string is actually the same. If there is any difference, when should I use the one over the other?
There is no difference in the output. The performance differences are negligible. Use whichever one looks nicer to you. Some prefer concatenation because syntax highlighters like it.
The value is the same, but just use one which will make your code easy to read or debug by yourself or by others you have given permission to!

Using stripslashes on a database row php

{$row['info']}
How do I use stripslashes() php function on this?
I've tried :
stripslashes({$row['info']}), doesnt work and this: {stripslashes($row['info'])}
Neither work.
Do I have to use a $var first??
Thanks
stripslashes returns the modified string, leaving its argument unchanged. You have to assign the result to a variable:
$var = stripslashes($row['info']);
That said, why are you doing this? You almost certainly shouldn't be. There is no reason to strip slashes on data coming from the database, unless you've double-escaped the slashes when the data was inserted.
Your question is somewhat confusing.
stripslashes() takes parameter and converts backslashed symbols to normal ones. more over, it does not affect the parameter. it returns stripped version.
so $result = stripslashes($source) or $row["info"] in your case.
$var = stripslashes($row['info']);
is more correct. Or in string, use it like this
echo "something".stripslashes($row['info'])." some more thingy";
It almost seems, that you are using heredoc syntax because of your {}. Question, is why? Are you seriously displaying your results like this?:
echo <<<my_results
Info: {$row['info']}
my_results;
Well, since that is cool way to do so then here is your fix:
$row_info = stripslashes($row['info']);
echo <<<my_results
Info: {$row_info}
my_results;
However, I do not recommend that approach. Rather do it like this:
echo 'Info:' . stripslashes($row['info']);
Because {stripslashes($row['info'])} doesn't work indeed and stripslashes({$row['info']}) is an anecdote!

PHP passing variables to Perl, having issues with using spaces between variables method, is there another, better way?

I find myself needing to use Perl more and more since PHP's regular expressions leave me wondering what is going on half the time as they simply don't respond as they should (as they do when I use Perl, for example)... i had been using this method to call perl (before i started trying to do this with regular expressions).. passing in a regex string as a variable causes all sorts of problems, such as using " ( )" anywhere makes it not work, among other things.. I am wondering if there is a better way to do this, than the string of variables after the perl filename method as it seems to have some glaring limiations.. thanks for any info.
the way I do it currently:
$file = "/pathtomy/perlscript.pl $var1 $var2 $var3" ;
ob_start();
passthru($file);
$perlreturn = ob_get_contents();
ob_end_clean();
return $perlreturn;
For the general case, you'll want to use escapeshellarg. Blindly wrapping everything in single quotes works most of the time but will fail when one of your arguments contains a single quote!
string escapeshellarg ( string $arg )
escapeshellarg() adds single quotes around a string and quotes/escapes any existing single quotes allowing you to pass a string directly to a shell function and having it be treated as a single safe argument. This function should be used to escape individual arguments to shell functions coming from user input. The shell functions include exec(), system() and the backtick operator.
Using a simple Perl program that prints its command-line arguments
#! /usr/bin/perl
$" = "]["; # " fix StackOverflow highlighting
print "[#ARGV]\n";
and then a modified version of the PHP program from your question
<?php
$var1 = "I'm a";
$var2 = "good boy,";
$var3 = "I am.";
$file = "./prog.pl " . implode(" ",
array_map("escapeshellarg",
array($var1,$var2,$var3)));
echo "command=", $file, "\n";
ob_start();
passthru($file);
$perlreturn = ob_get_contents();
ob_end_clean();
echo "return=", $perlreturn;
?>
we see the following output:
$ php prog.php
command=./prog.pl 'I'\''m a' 'good boy,' 'I am.'
return=[I'm a][good boy,][I am.]
Try to use quotation marks:
$file = "/pathtomy/perlscript.pl '$var1' '$var2' '$var3'" ;

Concatenation Operator

This might be a silly question but it struck me, and here i ask.
<?php
$x="Hi";
$y=" There";
$z = $x.$y;
$a = "$x$y";
echo "$z"."<br />"."$a";
?>
$z uses the traditional concatenation operator provided by php and concatenates, conversely $a doesn't,
My questions:
by not using the concatenation operator, does it effect the performance?
If it doesn't why at all have the concatenation operator.
Why have 2 modes of implementation when one does the work?
Only slightly, since PHP has to parse the entire string looking for variables, while with concatenation, it just slaps the two variables together. So there's a tiny performance hit, but it's not noticeable for most things.
It's a lot easier to concatenate variables like $_SERVER['DOCUMENT_ROOT'] using the concatenation operator (with quotes, you have to surround the variable in brackets or remove the single quotes in the array index; plus it just makes the string look all ugly). Plus, the concatenation operator allows more flexibility for formatting. For example, you can break up a long string literal onto multiple lines and then concatenate the different parts of it:
$blah = "This is a really really long string. I don't even know how " .
"long it is, but it's really long. Like, longer than an eel " .
"or even a boa constrictor. Wow.";
You can also use the concatenation operator to directly include return values from functions in a string literal (you can't include a function call in a double-quoted string), like this:
$blah = "This has a " . fn_call() . " result, which can't go in the quotes.";
I'm not sure I entirely understand what you're asking here, but I can say that PHP borrows a lot of things from Perl, and one of Perl's mantras is "There's more than one way to do it."
a. Yes. PHP has to parse the string for variables.
b. Because of lines like: echo 'Your Ip address is' . get_ip() . '.';
For reasons A and B.
In some cases your write less with:
$someLongVarName ="Hi";
$someLongVarName .=" there";
VS
$someLongVarName ="Hi";
$someLongVarName = "$someLongVarName there";
Addressing your last question:
Every language has multiple was of doing the same thing. Flexibility is important in every language since any given method may be better the another from situation to situation. The only thing that you should worry about in regards to this is to be consistent in your own code.

Categories