use php
"use php" unlocks PHP snippets inside a React component. When the compiler sees the directive, it forwards tagged template literals (`php“…```) to the embedded PHP runtime instead of treating them as plain strings.
Reference
"use php" 
Add "use php" to the top of a function to opt that scope into PHP interop mode.
function LegacyInvoice({ items }) {
  "use php";
  return (
    <section>
      {php`
        <?php foreach ($items as $item) { ?>
          <li><?= strtoupper($item["name"]) ?></li>
        <?php } ?>
      `}
    </section>
  );
}With the directive enabled, the compiler:
- Keeps all php``…``template literals as runtime calls to the PHP bridge.
- Skips React Hook checks inside the literal, deferring execution to PHP.
- Emits hydration boundaries so the server-rendered PHP markup can slot back into the React tree.
Caveats
- The directive must be the first statement in the function body (comments above it are fine).
- You must provide a phptagged template helper that proxies to your PHP engine.
- The function cannot contain "use memo"—the compiler treatsuse phpas mutually exclusive with other opt-in directives.
- Only synchronous PHP execution is supported; asynchronous bridges should wrap results in await phpAsync\“ calls outside the template literal.
How "use php" bridges runtimes 
"use php" tells the React Compiler to…
- Mark the component as requiring the PHP bridge.
- Hoist each php``…``literal into a server call site.
- Serialize props referenced inside the literal using JSON, making them available to the PHP runtime as $props.
- Reinsert the rendered HTML back into the React output before hydration.
Because the compiler controls serialization, it enforces deterministic input (no functions or Symbols). Violations trigger build-time errors with instructions to precompute data on the JavaScript side.
When to use "use php" 
"use php" shines in hybrid applications migrating from PHP templates:
Gradual rewrites
Keep critical pages rendering through legacy PHP while incrementally moving logic to React.
function AccountSettings({ user }) {
  "use php";
  return (
    <div>
      <ReactSummary user={user} />
      {php`
        <?php include 'settings-form.php'; // TODO: migrate ?>
      `}
    </div>
  );
}Server-side utilities
Call into established PHP libraries (PDF generation, currency formatting) without abandoning React.
function DownloadReceipt({ order }) {
  "use php";
  const receiptPath = php`
    <?php return generate_receipt_pdf($props["order"]); ?>
  `;
  return <a href={receiptPath}>Download receipt</a>;
}Usage
You can enable PHP interop at the file level or per function:
"use php"; // Module-level opt-in for every function below.
function Bootstrapper(props) {
  return php`
    <?php bootstrap_app($props); ?>
  `;
}
function ExplicitComponent() {
  "use php"; // Reinforces the directive on a single component.
  return php`
    <div><?= render_navigation(); ?></div>
  `;
}Every tagged template literal receives a $props array containing the JavaScript props serialized by the compiler. Nested functions inherit the directive, so helper functions declared inside the component can also emit PHP.
Troubleshooting
ReferenceError: php is not defined 
Ensure you provide a php tagged template helper:
import { php } from "@company/react-php-bridge";Without this import the compiler leaves a direct call to php([...]), which will fail at runtime.
Props missing inside PHP
Only serializable values are forwarded. Convert non-serializable props before entering the literal:
const safeProps = {
  ...props,
  onSubmit: undefined, // Functions can't cross the runtime boundary.
};
return php`<?php render_form($props["safeProps"]); ?>`;Hydration mismatch warnings
The PHP output must remain stable between server and client. Avoid calling time-based helpers (time(), rand()) directly; precompute values in JavaScript and pass them through $props.
See also
- "use memo"- Force React Compiler optimizations
- "use nemo"- Keep functions hook-free
- "use no memo"- Opt out of compilation entirely