Assuming that the evaluation of a string literal has no side effects, and as long as the comparison is legitimate (i.e., the result of func1() can be checked for equality with a string under the typing rules of the language in question, and that syntax is a valid way to compare those types), then it’s purely a question of style.
One reason to use this convention for equality checks containing literals is that it can help avoid a common type of error, the inadvertent use of a single-equals assignment (’=’) when the double-equals comparison (’==’) is intended. In most languages, trying to assign a value to a literal will result in a compiler error, so if you’re in the habit of putting the non l-value operand first, you will be notified by the compiler whenever you accidentally omit an ‘=’. If you place an l-value first, it will quietly perform the assignment, and the result (that you happen to be using in a control statement) will not be what you expect.
In some languages this isn’t really a concern; for example, C# will not allow you to implicitly convert any type to a boolean, and the compiler will issue a warning if you have such a constant boolean expression in a control statement, so this mistake in C# will always result in a compiler error or a warning, regardless of which style you choose. However, it’s worth noting that neither GCC nor Microsoft’s C/C++ compiler will give such a warning by default.
Now, there’s another reason you would need to be careful about the order of operands in a comparison, but it only applies when both operands can have side effects (for example, if both operands are function evaluations). In some languages, most notably C and C++, you have to make sure that the side effects cannot affect each other in any way, since the language makes no guarantees about which operand will be evaluated first. That is,
if(foo() == bar()) { … }
and
if(bar() == foo()) { … }
are the same thing as far as the language specifications are concerned, so if foo() has a side effect that might change the way bar() operates, the result of the comparison is undefined. The same goes for expressions using the post-increment or pre-increment operators. Some languages (like Java) are more forceful about evaluating things left-to-right, so this wouldn’t be a concern.
EDIT: And, of course, I see that my main points have already been brought up by Derleth and Indistinguishable. Serves me right for taking the time to write up a long reply. 
don’t ask brings up a good point about the Java NPEs too.